import re
phoneNumberRegex = re.compile(r'\d{3}-\d{3}-\d{4}')
mo = phoneNumberRegex.search('My number is 415-55-4242.')
print('Phone number found: ' + mo.group(0))
这是我用过的方法试图找出一些错误,代码都导致了这个错误
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
print('Phone number found: ' + mo.group(0))
AttributeError: 'NoneType' object has no attribute 'group'
答案 0 :(得分:3)
MatchObject.group
的用法没问题。
但是,\d{3}-\d{3}-\d{4}
与>>> import re
>>> re.search(r'\d{3}-\d{3}-\d{4}', 'My number is 415-55-4242.') # does not match => None
>>> re.search(r'\d{3}-\d{2}-\d{4}', 'My number is 415-55-4242.') # matches => MatchObject
<_sre.SRE_Match object; span=(13, 24), match='415-55-4242'>
不匹配,因为字符串的中间部分只包含2位数。
phoneNumberRegex = re.compile(r'\d{3}-\d{3}-\d{4}')
mo = phoneNumberRegex.search('My number is 415-55-4242.')
if mo:
print('Phone number found: ' + mo.group(0))
为了防止错误,您需要保护最后一条语句:
12345-123-12345
<强>更新强>
如果您不想匹配\b
,则需要使用字边界(r'\b\d{3}-\d{3}-\d{4}\b'
):
_nestedUl
答案 1 :(得分:1)
它有效 - 组是正确的方法。但是,你需要一个正则表达式中的捕获组,正则表达式也有点错误。请改用此代码:
import re
phoneNumberRegex = re.compile(r'(\d{3}-\d{2}-\d{4})')
mo = phoneNumberRegex.search('My number is 415-55-4242.')
print(mo.group(0))