0

私は文字列を持っています:

property1=1234, property2=102.201.333, property3=abc

1234 と 102.201.333 をキャプチャしたい。私は正規表現を使用しようとしています:

property1=([^,]*)|property2=([^,]*)

しかし、値の 1 つしかキャプチャできません。このリンクに基づいて、私も試しました:

((?:property1=([^,]*)|property2=([^,])+)
(?:(property1=([^,]*)|property2=([^,])+)

彼らは私が理解できないどこかから余分なグループをキャプチャします.

私は何が欠けていますか?

PS私はre.search()を使用しています。

編集:呼び出しコードに何か問題がある可能性があります:

m = re.search('property1=([^,]*)|property2=([^,]*)', text);
print m.groups()

Edit2: propertyX である必要はありません。それは何でもかまいません:

foo1=123, bar=101.2.3, foobar=abc

foo1=123, bar=weirdbar[345], foobar=abc
4

6 に答える 6

1

別の方法として、文字列分割を使用して辞書を作成することもできます。

text = "property1=1234, property2=102.201.333, property3=abc"
data = dict(p.split('=') for p in text.split(', '))
print data["property2"] # '102.201.333'
于 2013-07-30T01:25:46.000 に答える
0

これを試して:

property_regex = re.compile('property[0-9]+=([^\s]+)')
于 2013-07-30T01:25:11.483 に答える
0

を使用してい|ます。つまり、正規表現はバーの左側または右側のいずれかに一致します。

于 2013-07-30T01:20:19.620 に答える
0

あなたが試すことができます:

property_regex = re.compile('property[0-9]+=(?P<property_value>[^\s]+)')

これは、等号の後とスペースの前のすべてのプロパティに一致します。property_valueドキュメントにあるように、名前からアクセスできます。

Python reドキュメントからコピー

たとえば、パターンが (?P[a-zA-Z_]\w*) の場合、m.group('id') や m. .end('id')、および正規表現自体の名前 ((?P=id) を使用) および .sub() に指定された置換テキスト (\g を使用)。

于 2013-07-30T01:21:30.177 に答える