関連するすべての投稿を読み、インターネットを精査しましたが、これは本当に私を打ち負かしています.
日付を含むテキストがあります。
日付をキャプチャしたいのですが、特定のフレーズが前にある場合はキャプチャできません。
簡単な解決策は、正規表現に否定的な後読みを追加することです。
以下にいくつかの例を示します (findall を使用)。
「現在」というフレーズが前にない場合にのみ、日付をキャプチャしたい。
19-2-11
何か 何か 15-4-11
など 29-5-11 など
これが私の正規表現です:
(?<!as of )(\d{1,2}-\d{1,2}-\d{2})
予想された結果:
['19-2-11']
['15-4-11']
[]
実績:
['19-2-11']
['15-4-11']
['9-5-11']
29 ではなく 9 であることに注意してください。最初のパターンの\d{1,2}
ように堅実なものに変更すると、次のようになります。\d{2}
bad regex for testing: (?<!as of )(\d{2}-\d{1,2}-\d{2})
その後、期待どおりの結果が得られます。もちろん、1 桁の日だけでなく 2 桁の日も一致させたいので、これではダメです。
どうやら私の否定的な後読みは非常に貪欲です - 私の日付キャプチャよりももっと、それから数字を盗んで失敗しています。私は思いつく限りの貪欲さを正すあらゆる手段を試しましたが、これを正す方法がわかりません。
日付のキャプチャを最大限の貪欲に一致させてから、否定的な後読みを適用したいと思います。これは可能ですか?私の問題は、否定的な後読みの適切な使用のように見え、過度に複雑ではありませんでした。必要に応じて別の方法で達成できると確信していますが、これを行う方法を学びたいと思います。
Python の否定的な後読みをあまり欲張らないようにするにはどうすればよいですか?