我正在尝试使用正则表达式从字符串中提取城市,州和/或邮政编码。我正在使用的正则表达式(来自此处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
。感谢所有帮助。
答案 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')
答案 2 :(得分:0)
r = re.search("([^\d]+)?(\d{5})?")
r.groups()
(u'binghamton ny ', u'13905')