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

Python capture group and quote it with regex

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

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

我的代码:

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

既然是json,有没有更好的方法来解决这个问题?似乎这将是一个常见问题

您需要在此处使用非贪婪匹配(正如@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'

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

使用 +? 进行非贪婪匹配,意思是 "one or more — preferably as few as possible"。

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