0

私が単語AB1234XZYまたはさえ持っていると仮定し1AB1234XYZます。

'AB1234'または1AB1234(つまり、最後の文字までのすべて)のみを抽出したい。

次のコードを使用してそれを抽出しましたが、機能していません。

base= re.match(r"^(\D+)(\d+)", word).group(0)

print baseの場合、2番目のケースでは機能しません。なぜ何かアイデアはありますか?

4

3 に答える 3

1

(.+?\d+)\w+あなたが望むものをあなたに与えるでしょう。

またはこのようなものでも

^(.+?)[a-zA-Z]+$
于 2012-10-17T15:51:48.450 に答える
1

2番目のケースでは、数字で始まるため、正規表現は機能しません。パターンの\D先頭にあるは、数字ではないものと一致します。

これには非常に単純なものを使用できるはずです。実際、ここで見た他の何よりも単純です。

'.*\d'

それでおしまい!これは、文字列の最後の数字までのすべてに一致し、それ以降はすべて無視する必要があります。

これがオンラインで機能するパターンですので、自分で確認できます。

于 2012-10-18T15:59:36.400 に答える
0

re.match文字列の先頭から開始し、文字列re.search内で検索します。どちらも最初の一致を返します。.group(0)はすべてが一致に含まれます。キャプチャグループがある場合.group(1)は、最初のグループです...など...通常の規則では0が最初のインデックスであり、この場合、0はすべてを意味する特別なユースケースです。 。

あなたの場合、実際にキャプチャする必要があるものに応じて、おそらく使用するre.search方が良いでしょう。また、2つのグループを使用する代わりに(\D+\d+)、最初の(数字以外、数字)グループをキャプチャすることに注意してください。それで十分かもしれませんが、もっと具体的にしたいと思うかもしれません。

あなたのコメントを読んだ後「最後の文字の前のすべて」

この正規表現はあなたが必要とするものです:

regex = re.compile(r'(.+)[A-Za-z]')
于 2012-10-17T16:13:27.777 に答える