【发布时间】:2018-01-18 04:06:23
【问题描述】:
我正在尝试制作一个 python 脚本来读取文本文件 input.txt,然后扫描该文件中的所有电话号码并将所有匹配的电话号码写回 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 位数字。
【问题讨论】:
-
输出文件未显示预期。它只显示 +91- 和 +91 。所以我猜想写正则表达式有问题。在开头添加 (.*?) 如何改变正则表达式的行为?
-
所以您只需要输出文件中的电话号码,或者您也想删除重复项
-
不,我不想删除重复项。我希望在上面运行脚本后给出文本它应该写 1234567890、+91-1234567890 和 +91 5645454545 到 output.txt 但运行脚本后它只写 +91- 和 +91
-
使用这个正则表达式:'(?:\+[1-9]\d{0,2}[- ]?)?[1-9][0-9]{9}'
标签: python regex pattern-matching