我使用的是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演示。