私が単語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]')