2013-03-11 3 views
1

Как что-либо сопоставить, но письмо? я думал, что [^a-z]+ будет делать, но не совсем.Совпадение ничего, кроме буквы - регулярное выражение

У меня есть эта строка для поиска в:

"price":"7.99","opt":{"1":[1.01,1.02]},"mixedId":0,"price":"8.99","opt":{"3":[1.03],"4":[1.04,1.05]} 

Я хочу, чтобы эти значения 8.99 и 1.04,1.05, но он может не соответствовать 7.99

Я сделал так:

'"price":"(.+?)","opt":\{"[^a-z]*"4":\[(.+?)]' 

, но ничего не находит. Нужна поддержка :)

+0

вы имеете в виду соответствовать все, кроме цифра? http://regex101.com/r/nJ5qP8? –

+5

Ваши данные почти похожи на JSON (кроме двойного ключа «price» и отсутствующих внешних '{..}' брекетов. Зачем искать это как строку? Почему бы не интерпретировать это как JSON? –

+0

Спасибо за ответы ! @ kaᵠ этот сайт выглядит великолепно, спасибо миллион. @Martijn, насколько я знаю, это не JSON, а просто текст/html. @Rob ahh, я плохо хочу получить «1.04,1.05' не' 1.01, 1.02' спасибо за pinting, что вне. – nutship

ответ

3

Ваш фиксированный RegEx должен выглядеть примерно так:

"price":"([\d\.]+?)","opt":\{"[^a-z]*"4":\[(.+?)\]

Live Demo здесь: http://regex101.com/r/iU3oT7

1
import json 

def handle_duplicates(pairs):  
    d = {} 
    for k, v in pairs: 
     if k in d: 
      d[k].append(v) 
     else: 
      d.setdefault(k,[]).append(v) 
    return d 

s = '{"price":"7.99","opt":{"1":[1.01,1.02]},"mixedId":0,"price":"8.99","opt":{"3":[1.03],"4":[1.04,1.05]}}' 

d = json.loads(s, object_pairs_hook=handle_duplicates) 
print d 

из:

{u'mixedId': [0], 
u'opt': [{u'1': [[1.01, 1.02]]}, {u'3': [[1.03]], u'4': [[1.04, 1.05]]}], 
u'price': [u'7.99', u'8.99']} 

Как теперь есть Dict, вы можете получить прайс-лист, как d['price']

+0

Спасибо большое за это подробное объяснение. Мне нужно будет погрузиться в json, так как это выглядит довольно удобно. THX! – nutship

3

Следующая регулярное выражение будет соответствовать тому, что вы хотите (цифры и периоды), включая «1»:

[\d\.]+ 

Если вы хотите только сопоставить цифры, которые содержат период и два десятичных знаков вы можете использовать следующий шаблон:

\d+\.\d{2} 
+0

Но как насчет ':'? Мне все равно нужно их сопоставить. – nutship

Смежные вопросы