从正则表达式中提取两个字符串 Python
我正在尝试从一个字符串中提取城市、州和/或邮政编码,使用的是正则表达式。这个正则表达式来自这里:在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
在编程中,有时候我们会遇到一些问题,尤其是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该怎么解决。比如,有人可能在使用一个特定的功能时,发现它并没有按照预期工作,或者出现了错误信息。这种情况下,通常我们可以在网上寻找答案,比如在StackOverflow这样的论坛上。
在这些论坛上,很多人会分享他们遇到的问题和解决方案。你可以看到其他人是如何描述他们的问题,以及他们是如何找到解决办法的。这不仅能帮助你理解问题的本质,还能让你学到一些新的技巧和方法。
总之,遇到问题时,不要害怕去问,也不要放弃。通过查找资料和向他人请教,你会逐渐掌握更多的知识和技能。
r = re.search("([^\d]+)?(\d{5})?")
r.groups()
(u'binghamton ny ', u'13905')
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
最简单的方法可能就是给这两个捕获组起个名字:
reg = re.compile('(?P<city>[^\d]+)?(?P<zip>\d{5})?')
然后你可以通过 groupdict
来访问它们:
>>> match = reg.match("binghamton ny 13905")
>>> match.groupdict()
{'city': 'binghamton ny ', 'zip': '13905'}
这样你就可以通过名字轻松获取这两部分信息,而不是通过位置索引。