正则表达式获取美国邮政编码

4 投票
4 回答
18382 浏览
提问于 2025-04-17 02:20

我该如何从以下字符串中“提取”美国的邮政编码呢?

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

4 个回答

2

你可以使用:

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

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

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

这样就可以了。

评论中提到的匹配和搜索是对的,如果我想加上后面的4个字符:

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

这样就可以了。

9

首先,你使用的是 match,这个方法只会从字符串的开头开始匹配:可以查看这个链接了解更多 http://docs.python.org/library/re.html#matching-vs-searching

另外,即使你使用的是 search,你也没有提取出包含那5个数字的部分,而这些数字是一定会出现的。

最后,即使你使用的是 search,如果你的正则表达式以一个插入符号(^)开头,它会强制从字符串的开头开始搜索,这在你的情况下显然是行不通的。

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

撰写回答