【问题标题】:Python capture group and quote it with regexPython捕获组并用正则表达式引用它
【发布时间】:2015-02-18 23:22:46
【问题描述】:

我正在尝试使用正则表达式从文件中捕获数据并引用它。我想捕获“邮政编码”:和逗号之间的任何内容。当我替换该值时,它会显示为“whateverdata(末尾没有引号)。为什么会这样?

数据将如下所示:"State":"NC","Postal Code":27605,"Description":null,

我的代码:

pattern = r'"Postal Code":(.+),'
replacement = r'"\1"'
jsonObj = re.sub(pattern, replacement, jsonObj)

既然这是 json,有没有更好的方法来解决这个问题?看来这将是一个普遍的问题

【问题讨论】:

  • 这样的评论应该包含在问题本身中。
  • 您需要改用非贪婪量词。 (.+?)
  • 你可以试试 json.loads()
  • json.loads() 如果有一个前导0的数字会失败,可以有

标签: python regex capture


【解决方案1】:

您需要在此处使用 非贪婪匹配(如 cmets 中的 @hwnd 建议):

r'"Postal Code":(.+?),'

或者,既然您知道这是邮政编码,请匹配一个或多个数字

r'"Postal Code":(\d+),'

演示:

>>> import re
>>> pattern = re.compile(r'"Postal Code":(\d+),')
>>> source = '"State":"NC","Postal Code":27605,"Description":null,'
>>> pattern.search(source).group(1)
'27605'

【讨论】:

    【解决方案2】:

    问题在于+ greedy 运算符。它将尽可能多地匹配,并且仍然允许正则表达式的其余部分匹配,直到它到达行中的最后一个逗号。

    +? 用于非贪婪匹配,意思是“一个或多个——最好尽可能少”。

    pattern = r'"Postal Code":(.+?),'
    

    【讨论】:

      猜你喜欢
      • 2020-02-13
      • 2018-07-21
      • 1970-01-01
      • 2019-01-12
      • 2013-05-07
      • 2020-03-24
      • 2019-03-17
      相关资源
      最近更新 更多