私は次のような文字列を持っています
abcde1234_abcde
Python reを使用して抽出したい1234_abcde
のですが、有効な文字列には少なくとも1つの数字が含まれ、その後に_
(underscore)が続きます。
私が使用しているとき、それは結果として.*(?P<required>\d+\_.*)
私に与えていません4_abcde
1234_abcde
これには助けが必要です。
私は次のような文字列を持っています
abcde1234_abcde
Python reを使用して抽出したい1234_abcde
のですが、有効な文字列には少なくとも1つの数字が含まれ、その後に_
(underscore)が続きます。
私が使用しているとき、それは結果として.*(?P<required>\d+\_.*)
私に与えていません4_abcde
1234_abcde
これには助けが必要です。
なぜ一致しないのですか:
\d+_.*
これは 1 つ以上の数字\d+
とアンダースコアに一致_
し、その後は文字列または行の終わりまですべてをキャプチャします。
次のように、貪欲なバージョンのアスタリスクから消極的な(怠惰な)バージョンに切り替えた場合、元の表現は機能していたはずです*?
。
.*?(?P<required>\d+_.*)
解決策は次のとおりです。
re.match(r'.*?(?P<required>\d+\_.*)', 'abcde1234_abcde').group(1)
元の式では、 after.*
なし?
で可能な限り一致させようとするため、最後の桁のみが取得されます。
試してみてください:
\D*(?P<required>\d+_.*)