正则表达式获取Zip Cod

2024-05-17 07:16:54 发布

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

如何从以下字符串中“提取”邮政编码(US)?

import re
address = "Moab, UT 84532"
postal_code = re.match('^\d{5}(-\d{4})?$', address)
print postal_code

Tags: 字符串importreaddressmatchcodeus邮政编码
3条回答

首先,您使用的是match,它只从字符串的开头开始匹配:请参见http://docs.python.org/library/re.html#matching-vs-searching

另外,即使你使用的是搜索,你也不会抓取包含5位数字的组。

最后,即使您使用的是搜索,用一个克拉^开始您的正则表达式将迫使它从头开始搜索,这显然在您的情况下是行不通的。

>>> postal_code = re.search(r'.*(\d{5}(\-\d{4})?)$', address)
>>> postal_code.groups()
('84532', None)

假设邮政编码总是5位(在美国不是这样吗?)

re.match('\d{5}$', address)

会的。

关于match vs search的注释是正确的,如果我想包括额外的4个字符:

re.search('\d{5}(-\d{4})?$', address)

应该这么做。

您可以使用:

postal_code = re.match('^.*?(\d+)$', address)
if postal_code is not None:
    print postal_code.group(1)

相关问题 更多 >