我是一个初学者,计划编写一个正则表达式来在示例文本中查找电话号码以及(如果有的话)电话分机号。我使用的是“findall”选项。我已经花了相当长的时间尝试和修改代码,以下是我觉得最有效的版本。但是,我不明白为什么终端给出这样的结果。
如果我移除分机号的部分,它可以正常工作,但是一旦添加这部分,它就无法找到任何匹配项。
import re
text = 'This is my number (801)-804-2121 ext 458, my NEW PHONE IS 375-704-5121, work phone is 805.544.2335 and my wife\'s is 458 8458'
phoneNumberReg = re.compile(r'''
\(?\d{3}\)? # 可选的区号
\D{0,3} # 分隔符(最多3个非数字字符)
\d{3} # 前三位数字
\D{0,3} # 分隔符(最多3个非数字字符)
\d{4} # 后四位数字
\s*(ext|x|ext.)? # 可选的分机标记
\s*(\d{2,5})? # 可选的分机号(2到5位数字)
''', re.VERBOSE)
resultsPhone = phoneNumberReg.findall(text)
print(resultsPhone)
# 终端输出:
['', '', '']
[('ext', '458'), ('', ''), ('', '')]
另外,如果我把区号部分设置为可选以查找形如000-0000的电话号码,它只能找到号码的第一部分。
(\(?\d{3}\)?)?
# 终端输出:
['', '', '']
['(801)', '375', '805', '']