正则表达式获取美国邮政编码
我该如何从以下字符串中“提取”美国的邮政编码呢?
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)