如何在字符串中间提取zipcode?

2024-10-01 07:41:03 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个地址:

address = "35 rue de trucmuche, 75009 PARIS"

我想用正则表达式提取地址中的zipcode(75009)。在

我试过了:

^{pr2}$

我得到一个:

AttributeError: 'NoneType' object has no attribute 'groupdict'

我想我的正则表达式是错的。我不明白为什么。在


Tags: noobjectaddress地址deattributeattributeerrorhas
3条回答

你只是错过了?在命名的捕获组中:

^.*(?P<zipcode>\d{5}).*$

^{pr2}$

Python中的命名捕获组必须以?开头:

>>> import re
>>> address = "35 rue de trucmuche, 75009 PARIS"
>>> re.match('^.*(?P<zipcode>\d{5}).*$', address).groupdict()['zipcode']
'75009'

否则,您将尝试匹配文本P<zipcode>。在


另外,.groupdict()方法返回一个普通的Python字典:

^{pr2}$

这意味着您将需要以dct['zipcode']的形式访问zipcode值,而不是dct.zipcode。在

你的正则表达式是错误的。这就是它不匹配的原因,它返回None,并抱怨None没有groupdict()。在

事实上,据我所知,有两个错误。在

reg = re.compile('^.*(?P<zipcode>\d{5}).*$')

^- (需要一个“?”在“P”前面)

另一个错误是groupdict()需要像普通的dict一样被访问,也就是说

^{pr2}$

你也应该检查一下是否匹配

if match:
     match.groupdict()['zipcode']

根据https://docs.python.org/2/library/re.html#match-objects,如果匹配对象存在,它将返回True。在

相关问题 更多 >