0

これは私の表現です:

r'.*?(\d*)\s(good|bad).*\:\s(\d*)'`

文字列:

Hello 30 good. found: 50.

Hello 10 bad.

私の質問は次のとおりです。私の式は最初の文字列で(30、良い、50)一致しますが、2番目の文字列で(10、悪い)と一致させるにはどうすればよいですか?

現在のところ、式は説明に適合しないため、2行目を省略しています。

ありがとう!

4

2 に答える 2

4

?数量詞を使用して、2番目の部分をオプションにするだけです。

r'.*?(\d*)\s(good|bad)(?:.*\:\s(\d*))?'

を使用(?:.*\:\s(\d*))?すると、パターンが.*\:\s(\d*)オプションになります。手段として?一致し0 or 1ます。

non-capturingオプションにするための追加のグループ化のために、グループを使用したことに注意してください。これを使用することにより、キャプチャグループの番号付けが現在のものから変更されることはありません。なぜなら、キャプチャされていないグループ(?:...)モノ)は、キャプチャされたグループの数には考慮されないからです。

于 2013-01-28T20:23:10.357 に答える
0

これはうまくいくはずだと思います

r'.*?(\d+)\s(good|bad)[^\d]*(\d*)'
于 2013-01-28T20:50:57.753 に答える