我正在使用熊猫从csv文件中遍历几千行真正混乱的数据。我正在遍历数据框列之一,该列通常包含相当短的字符串,这些字符串是完全不同的,级联的客户信息(名称,位置,客户编号,电话号码等)。
客户号码和电话号码之间并没有很多可识别的区别,尽管df列中的大多数行在电话号码的字符串文本中都包含TEL标识符,如下所示(其中0123456是客户号码,而55555 5555是TEL):
JERRY 0123456 TEL:55555 5555所在地城市
我可以从TEL:指示符后面的数字中清除空格,但是似乎无法制定仅提取TEL:指示符后面的文本的正则表达式。在我的新df [“ TEL”]栏中,理想的输出应该是555555555。
到目前为止,我的正则表达式是(请注意,某些电话号码用于处理国际呼叫者的长度是不同的,其中一些包含国家/地区代码,而某些则没有):
re.match(r'(TEL)?:??[0-9] {9-12}')。group()
但是,上面的正则表达式仍然提取我要匹配的字符串的TEL片段。如何解决此错误?
答案 0 :(得分:0)
您可以在后面使用正面的表情。
(?<=TEL: )[0-9 ]{9,12}
通过这种方式,它会检查字符串“ TEL:”是否在数字后面。
但是,最好遍历字符串,当遇到字符串TEL时,跳过两个字符并获取以下数字。
答案 1 :(得分:0)
re.match(r'(?:TEL)?:? ?([0-9 ]{9-12})').group(1)
(?:...)
使其成为非捕获组
([0-9 ]{9-12})
将该部分捕获为组(1)