Python捕获组并使用正则表达式引用它

时间:2015-02-18 23:22:47

标签: python regex capture

我试图使用正则表达式从文件中捕获数据并引用它。我希望捕获"邮政编码":和逗号之间的任何内容。当我替换该值时,它会显示如下" whateverdata(最后没有引号。)为什么会这样?

数据看起来像这样:"State":"NC","Postal Code":27605,"Description":null,

我的代码:

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

既然这是json,还有更好的方法吗?似乎这将是一个常见的问题

2 个答案:

答案 0 :(得分:2)

您需要在此处使用非贪婪匹配(如评论中建议的@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'

答案 1 :(得分:1)

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

使用+?表示非贪婪的匹配,意思是“一个或多个 - 最好尽可能少”。

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