【问题标题】:Extracting 2 strings from regular expression Python从正则表达式Python中提取2个字符串
【发布时间】:2014-05-14 14:52:45
【问题描述】:

我正在尝试使用正则表达式从字符串中提取城市、州和/或邮政编码。我使用的正则表达式(从这里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。感谢所有帮助,谢谢。

【问题讨论】:

  • 你的意思是match.groups()
  • 您需要第二个捕获组:match.group(2)

标签: python regex string


【解决方案1】:

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

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

然后访问groupdict:

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

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

【讨论】:

    【解决方案2】:

    我会同意 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

    【讨论】:

      【解决方案3】:
      r = re.search("([^\d]+)?(\d{5})?")
      r.groups()
      
      
      (u'binghamton ny ', u'13905')
      

      【讨论】:

      • 您能否尽力描述您在此答案中的修复内容?
      猜你喜欢
      • 1970-01-01
      • 2014-08-25
      • 1970-01-01
      • 1970-01-01
      • 2021-01-23
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      • 2021-10-19
      相关资源
      最近更新 更多