問題は、パターンの先頭に貪欲ドットマッチングサブパターンが最後までのすべての文字をつかみ、そしてそれは他のために対応するために得るために持っているものを得後戻りするということですサブパターン。最初の2文字はオプションなので、テキストは与えられません。
.*
のようにre.search
に完全な文字列の一致を必要としないためです。
使用
(?:(?P<day>\d{1,2}))?(?:(?P<month>[a-zA-Z]+))?(?P<year>\d{4})
私はまた、マッチオブジェクトがビットクリーナーとなるように、非撮影する任意の基を取り込む変換regex demo
を参照してください。
あなたはまだあなたのアプローチを使用している場合、あなたはパターン(怠惰なドットマッチング)の先頭に.*?
を使用して検討するかもしれないが、あなたはその後、改行を心配しなければならないことに注意してください(OK、あなたはそれを解決するためにre.S
フラグを使用することができます1)、そしてその方法では、の最初のインスタンスを文字列に入れます。複数ある場合は、最後のものを取得する必要がありますが、最良の方法は、提案されたパターンにre.findall
を使用して、結果のリストの最後の要素を取得することです。
開始時にドットと怠惰なマッチングを使用する: '。*?'、しかし私はあなたがそれを必要とするとは思わない。 –
ありがとうWiktor !!!私は怠惰なマッチングについて決して忘れることはありません – Miriam