如何匹配任何东西但是一封信?我以为[^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 :(得分:3)
以下正则表达式将匹配您想要的(数字和句点),包括“1”:
[\d\.]+
如果您只想匹配包含句点和两位小数的数字,则可以使用以下模式:
\d+\.\d{2}
答案 1 :(得分:3)
您的固定RegEx应如下所示:
"price":"([\d\.]+?)","opt":\{"[^a-z]*"4":\[(.+?)\]
答案 2 :(得分: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']}
由于你现在有一个字典,你可以得到像d['price']
答案 3 :(得分:0)
要匹配所有不是字母的内容(如原始问题中所述),请使用此字符类,它是对来自the documentation的\w
的修改:
[^a-zA-Z]
从后续评论中读到,听起来你对这个角色类的第1组更感兴趣,类似于@Mauritz Hansen:
'\[([\d\.,]*)\]
我对你的意思感到困惑"我也需要匹配:"此Python代码查找1.01
到1.05
的价格:
import re
txt = '"price":"7.99","opt":{"1":[1.01,1.02]},"mixedId":0,"price":"8.99","opt":{"3":[1.03],"4":[1.04,1.05]}'
pattern = '\\[([\d\\.,]*)\\]'
for m in re.finditer(pattern2, txt):
print m.group(1)
输出:
1.01,1.02
1.03
1.04,1.05