正则表达式模块中.group()的正确语法是什么

时间:2016-01-20 13:45:04

标签: python regex expression

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'

2 个答案:

答案 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))