我的正则旨在寻找基于我们的电话号码,并不是在寻找正确的模式



我使用的是python 3.6,在"自动化无聊的东西"课程中工作,并尝试学习如何在Regex中使用冗长模式。执行以下代码时,以某种方式打印结果为:

[('123-',''),('415-',''),('905-','')

有人可以告诉我我做错了什么吗?我希望代码在字符串中返回两个电话号码。

import re
phoneNum = re.compile(r'''
(ddd-)|  # area code without parentheses but with dash
((ddd) ) # -or- area code with parentheses and no dash
ddd # first 3 digits
-      # second dash
dddd # last 4 digits''', re.VERBOSE) 
print(phoneNum.findall('(415) 123-2342 and 415-905-1234 are the numbers.'))

第一个分组是错误的,您需要替代ddd-(ddd),并且在括号化的数字之后也可以逃脱空间,或者将其视为格式化的whitespace(因为您使用的是re.VERBOSE)。

可以将其固定为

(?:d{3}-|   # area code without parentheses but with dash
(d{3}) ) # -or- area code with parentheses and no dash
d{3}        # first 3 digits
-            # second dash
d{4}        # last 4 digits

在第二行上注意thet 。参见正则演示。您可以在表达式的开始/结尾添加b,以匹配一个数字。

使用

import re
phoneNum = re.compile(r'''
(?:d{3}-|  # area code without parentheses but with dash
(d{3}) ) # -or- area code with parentheses and no dash
d{3} # first 3 digits
-      # second dash
d{4} # last 4 digits''', re.VERBOSE) 
print(phoneNum.findall('(415) 123-2342 and 415-905-1234 are the numbers.'))
# => ['(415) 123-2342', '415-905-1234']

请参阅Python演示。

相关内容

  • 没有找到相关文章

最新更新