2015-02-18 3 views
2

Я пытаюсь использовать регулярное выражение для захвата данных из файла и его цитирования. Я хочу зафиксировать что-нибудь между «Почтовым кодом» и запятой. Когда я заменить это значение, это показывает, как это «whateverdata Почему этоГруппа захвата Python и цитирую его с помощью regex

данных будет выглядеть примерно так (без цитаты на конце.): "State":"NC","Postal Code":27605,"Description":null,

Мой код:

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

поскольку это JSON, есть лучший способ пойти об этом Похоже, что это будет общая проблема

+0

Подобные комментарии должны быть включены в вопрос. –

+2

Вместо этого вам нужно использовать не-** жадный ** квантификатор. '(. +?)' – hwnd

+0

Вы можете попробовать json.loads() –

ответ

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

Проблема является +greedy оператор. Он будет соответствовать столько, сколько может, и допустить, чтобы остаток регулярного выражения соответствовал, пока не достигнет последней запятой в строке.

Используйте +? для не жадного соответствия, означающего «один или несколько - желательно как можно меньше».

pattern = r'"Postal Code":(.+?),' 
Смежные вопросы