3

如何匹配除字母之外的任何内容?我以为[^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

4 回答 4

3

Your fixed RegEx should look something like this:

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

Live demo here: http://regex101.com/r/iU3oT7

于 2013-03-11T21:17:03.173 回答
3

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

[\d\.]+

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

\d+\.\d{2}
于 2013-03-11T21:06:40.820 回答
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']

于 2013-03-11T21:02:57.677 回答
0

要匹配不是字母的所有内容(如原始问题中所示),请使用此字符类,它是\w文档的修改:

[^a-zA-Z]

从后续评论来看,听起来你对类似于@Mauritz Hansen 的这个字符类的第 1 组更感兴趣:

'\[([\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
于 2018-05-12T10:43:52.097 回答