python提取指定位数的数字

想找到表格一列中所有位数为8位、18位的数字,提取出来成为新的一列。
该列中有中文、数字、字母加数字的内容。
请问各位要怎么用python实现呀?
我参考了别人的代码用的是:
data['号码'] = data['text'].apply(lambda x:re.findall(r"\d{8}",x))
但是会把位数大于8的数字拆分为几个8位数的。
谢谢大家!!

data['号码'] = data['text'].apply(lambda x:re.findall(r"\d{18}|\d{8}\D",x))

【以下回答由 GPT 生成】

通过使用正则表达式的re.findall()函数可以提取指定位数的数字。在问题中,需要提取8位和18位的数字。

你已经尝试了使用以下代码进行提取:

data['号码'] = data['text'].apply(lambda x:re.findall(r"\d{8}", x))

这个方法的问题在于它只能提取连续8位的数字,对于超过8位的数字会进行拆分。为了解决这个问题,我们可以使用更精确的正则表达式。

下面是一个更好的解决方案,它可以同时提取8位和18位的数字,并将它们放入新的一列。

import re

data['号码'] = data['text'].apply(lambda x: re.findall(r"\b(\d{8}|\d{18})\b", x))

这里使用了\b来表示词边界,确保提取的数字满足8位或18位,并且不会拆分成多个部分。然后使用re.findall()函数将所有匹配的数字提取出来,并将它们赋值给新的一列号码

注意:在使用这个解决方案之前,你需要确保已经导入了re模块,并将输入数据存储在名为data的DataFrame中,且要提取的列名为text

希望这个解决方案对你有所帮助!如果还有其他问题,请随时提问。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^