从正则表达式Python中提取2个字符串

时间:2014-05-14 14:52:46

标签: python regex string

我正在尝试使用正则表达式从字符串中提取城市,州和/或邮政编码。我正在使用的正则表达式(来自此处get city, state or zip from a string in python)是([^\d]+)?(\d{5})?,当我在http://regex101.com/上对其进行测试时,它会准确地选择我想要匹配的两个字符串。

但是我不确定如何在Python中分离这两个字符串。这是我尝试过的:

import re

string = "binghamton ny 13905"

reg = re.compile('([^\d]+)?(\d{5})?')
match = reg.match(string)

return match.group()

这只是返回整个字符串。有没有办法单独拉出每场比赛?

我还尝试将正则表达式分成两个不同的正则表达式(一个用于城市,州和一个用于邮政编码),但邮政编码正则表达式返回空字符串或None。感谢所有帮助。

3 个答案:

答案 0 :(得分:2)

可能最简单的方法是命名两个捕获组:

reg = re.compile('(?P<city>[^\d]+)?(?P<zip>\d{5})?')

然后访问groupdict

>>> match = reg.match("binghamton ny 13905")
>>> match.groupdict()
{'city': 'binghamton ny ', 'zip': '13905'}

这使您可以通过名称轻松访问这两条信息,而不是索引。

答案 1 :(得分:1)

我同意jonrsharpe

string = "binghamton ny 13905"
reg = re.compile('(?P<city>[^\d]+)?(?P<zip>\d{5})?')
result = re.match(reg, string)

此外,您可以按名称访问变量:

result.group('city')
result.group('zip')

Python re reference page

答案 2 :(得分:0)

r = re.search("([^\d]+)?(\d{5})?")
r.groups()


(u'binghamton ny ', u'13905')