我试图创建一个读取文本文件input.txt的python脚本,然后扫描该文件中的所有电话号码,并将所有匹配的电话号码写回output.txt
让我们说文本文件是这样的:
嘿,我的号码是1234567890,另一个号码是91-1234567890 . 但如果这些都不可用,您可以致电91 5645454545(或)发送电子邮件至abc@xyz.com
它应匹配 1234567890 , +91-1234567890 和 +91 5645454545
import re
no = '^(\+[1-9]\d{0,2}[- ]?)?[1-9][0-9]{9}' #i think problem is here
f2 = open('output.txt','w+')
for line in open('input.txt'):
out = re.findall(no,line)
for i in out :
f2.write(i + '\n')
正则表达式为no:它需要国家代码最多3位数,然后是 - 或空格是可选的,国家代码本身是可选的,然后是10位数字 .
3 回答
是的,问题出在你的正则表达式上 . 幸运的是,它很小 . 您只需要删除
^
字符:^
表示您只想在字符串的开头匹配 . 您希望在整个字符串中多次匹配 . 这是101demo .对于python,您还需要使用
?:
指定非捕获组 . 否则,re.findall不会返回完整匹配:大胆强调我的 . 这是relevant question .
这是您为问题指定非捕获组时获得的内容:
这段代码可以工作:
输出将是:
您可以使用
在demo看演示