私が単語AB1234XZYまたはさえ持っていると仮定し1AB1234XYZます。
'AB1234'または1AB1234(つまり、最後の文字までのすべて)のみを抽出したい。
次のコードを使用してそれを抽出しましたが、機能していません。
base= re.match(r"^(\D+)(\d+)", word).group(0)
私print baseの場合、2番目のケースでは機能しません。なぜ何かアイデアはありますか?
(.+?\d+)\w+あなたが望むものをあなたに与えるでしょう。
またはこのようなものでも
^(.+?)[a-zA-Z]+$
2番目のケースでは、数字で始まるため、正規表現は機能しません。パターンの\D先頭にあるは、数字ではないものと一致します。
これには非常に単純なものを使用できるはずです。実際、ここで見た他の何よりも単純です。
'.*\d'
それでおしまい!これは、文字列の最後の数字までのすべてに一致し、それ以降はすべて無視する必要があります。
これがオンラインで機能するパターンですので、自分で確認できます。
re.match文字列の先頭から開始し、文字列re.search内で検索します。どちらも最初の一致を返します。.group(0)はすべてが一致に含まれます。キャプチャグループがある場合.group(1)は、最初のグループです...など...通常の規則では0が最初のインデックスであり、この場合、0はすべてを意味する特別なユースケースです。 。
あなたの場合、実際にキャプチャする必要があるものに応じて、おそらく使用するre.search方が良いでしょう。また、2つのグループを使用する代わりに(\D+\d+)、最初の(数字以外、数字)グループをキャプチャすることに注意してください。それで十分かもしれませんが、もっと具体的にしたいと思うかもしれません。
あなたのコメントを読んだ後「最後の文字の前のすべて」
この正規表現はあなたが必要とするものです:
regex = re.compile(r'(.+)[A-Za-z]')