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.99これらの値を取得したいのです1.04,1.05が、一致しません7.99

私はこれが好きでした:

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

しかし、何も見つかりません。いくつかのサポートが必要です:)

4

4 に答える 4

3

次の正規表現は、「1」を含め、必要なもの(数字とピリオド)に一致します。

[\d\.]+

ピリオドと小数点以下2桁を含む数字のみを照合する場合は、次のパターンを使用できます。

\d+\.\d{2}
于 2013-03-11T21:06:40.820 に答える
3

固定正規表現は次のようになります。

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

こちらのライブデモ:http://regex101.com/r/iU3oT7

于 2013-03-11T21:17:03.173 に答える
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]

フォローアップのコメントを読むと、@MauritzHansenに似たこのキャラクタークラスのグループ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 に答える