これは私の表現です:
r'.*?(\d*)\s(good|bad).*\:\s(\d*)'`
文字列:
Hello 30 good. found: 50.
Hello 10 bad.
私の質問は次のとおりです。私の式は最初の文字列で(30、良い、50)一致しますが、2番目の文字列で(10、悪い)と一致させるにはどうすればよいですか?
現在のところ、式は説明に適合しないため、2行目を省略しています。
ありがとう!
?
数量詞を使用して、2番目の部分をオプションにするだけです。
r'.*?(\d*)\s(good|bad)(?:.*\:\s(\d*))?'
を使用(?:.*\:\s(\d*))?
すると、パターンが.*\:\s(\d*)
オプションになります。手段として?
一致し0 or 1
ます。
non-capturing
オプションにするための追加のグループ化のために、グループを使用したことに注意してください。これを使用することにより、キャプチャグループの番号付けが現在のものから変更されることはありません。なぜなら、キャプチャされていないグループ((?:...)
モノ)は、キャプチャされたグループの数には考慮されないからです。
これはうまくいくはずだと思います
r'.*?(\d+)\s(good|bad)[^\d]*(\d*)'