我有这个字符串。
P O BOX 32370, CA 92263
这个正则表达式\w{2} \d{5}
但它以粗体匹配两个文本。 “P O B OX 32370 , CA 92263 ”
实际上我想提取State和Zip代码。
我想抓取文字开头和空格,然后精确2个字母,然后是一个空格,然后是5个数字。
答案 0 :(得分:2)
您可以添加字边界\b
以确保图案不具有前导或尾随字符(字母数字和下划线):
import re
re.findall(r"\b\w{2} \d{5}\b", "P O BOX 32370, CA 92263")
#['CA 92263']
答案 1 :(得分:0)
抓取文字的起点和空格,然后精确 2 字母,然后一个 空格,然后精确5位数。
不幸的是,此模式\b\w{2} \d{5}\b
也会在"P O BOX 32370, 2A 92263"
这样的字符串中找到匹配项,但结果并不符合您的要求。 \w
- 匹配所有字母数字字符。
要提取状态和邮政编码,请使用以下方法{ {3}}和re.search()(获取匹配的所有已命名子组)方法:
s = 'P O BOX 32370, CA 92263'
m = re.search(r'\b(?P<state>[a-zA-Z]{2}) (?P<zip_code>\d{5})\b', s)
result = m.groupdict() if m else ''
print(result)
输出:
{'zip_code': '92263', 'state': 'CA'}