使用Regex匹配精确的数字和单词数 - Python27

时间:2017-02-25 16:20:55

标签: python regex python-2.7

我有这个字符串。

P O BOX 32370, CA 92263

这个正则表达式\w{2} \d{5}

但它以粗体匹配两个文本。 “P O B OX 32370 CA 92263

实际上我想提取State和Zip代码。

我想抓取文字开头和空格,然后精确2个字母,然后是一个空格,然后是5个数字。

2 个答案:

答案 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'}