匹配除了一封信之外的任何东西 - 正则表达式

时间:2013-03-11 20:56:55

标签: python regex python-2.7

如何匹配任何东西但是一封信?我以为[^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.991.04,1.05,但它不匹配7.99

我确实喜欢这个:

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

但它一无所获。需要一些支持:))

4 个答案:

答案 0 :(得分:3)

以下正则表达式将匹配您想要的(数字和句点),包括“1”:

[\d\.]+

如果您只想匹配包含句点和两位小数的数字,则可以使用以下模式:

\d+\.\d{2}

答案 1 :(得分:3)

您的固定RegEx应如下所示:

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

现场演示:http://regex101.com/r/iU3oT7

答案 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.011.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