2017-02-25 78 views
0

我有这个字符串。使用正则表达式匹配数字和单词的确切数量 - Python27

P O BOX 32370, CA 92263 

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

但是,两种文本加粗匹配。 “P○B OX 32370CA 92263

其实我想提取州和邮编。

我想抢文本开始和一个空格,然后确切的2个字母,然后一个空格,然后确切的5位数字。

+1

你似乎在字边界之后,使用'\ b \ w {2} \ d {5} \ b'。 –

回答

1

您可以添加文字边界\b确保图案不具有开头或结尾的单词字符(字母数字和下划线):

import re 

re.findall(r"\b\w{2} \d{5}\b", "P O BOX 32370, CA 92263") 
#['CA 92263'] 
+0

谢谢,我怎样才能在'\ d {5} \ b'中添加条件来获取4或5的数字?可能? – Umair

+0

您可以像'\ d {4,5} \ b'那样在'{}'中指定下限。这匹配4或5位数字。 – Psidom

0

抢文字起点和空间,然后精确 字母,然后一个 空间,然后确切5位数字。

不幸的是,这种模式\b\w{2} \d{5}\b还会发现这样的字符串匹配为"P O BOX 32370, 2A 92263"给不符合您的要求的结果。 \w - 匹配所有字母数字个字符。
要提取国家邮编使用带有re.search()match.groupdict()以下方法(获得本场比赛的所有命名的子组)方法:

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