7

文字列の最後の単語が特定の単語であるかどうかを調べる単純な正規表現を作成しようとしています。

私はこのようなことを書きました"(\W|^)dog$"。(文の最後の単語が犬かどうかを確認してください)

この正規表現は正しいですが、Python では次のようなものを入力しても何も返されません"I like dog"

これを Rubular 正規表現エディターでテストしたところ、うまくいくようです。

私は何か間違っていますか?

編集:私の簡単なコードを追加する

import re
pm = re.compile("(\W|^)dog$")
has = pm.match("i love dog")
print(has)
4

3 に答える 3

20

ここで正規表現する必要はありません。単純な分割は仕事をします:

>>> s = "I like dog"
>>> s.rsplit(None, 1)[-1] == 'dog'
True

最後の単語のみが必要なので、最後str.rsplitから分割を開始するために使用でき、2 番目の引数として渡す1と、分割は 1 回だけ実行されます。次に、返されたリストの最後の要素を取得します。


正規表現でこれを行うには、メソッドre.searchの代わりにre.matchメソッドを使用する必要があります。後者は文字列の先頭に一致するため、文字列全体に一致するように正規表現を作成する必要があります。あなたはむしろすることができます:

pm = re.compile(r"\bdog$")
has = pm.search("i love dog")

\b単語境界です。ライブデモを参照してください

で同じことを行うにはre.match、正規表現を - にする必要がありますr".*dog$"

pm = re.compile(r".*dog$")
has = pm.match("i love dog")
于 2013-10-18T16:23:02.120 に答える
2

コードを少し変更すると次のようになります (動作します)。

import re
pm = re.compile(r'.*\b(dog)$')
has = pm.match("i love dog")
print(has)

正規表現は、.*\b(dog)$すべて ( )、単語境界 ( )、単語 ( ) 、.*行末 ( \b) を照合します。これはまさにあなたが望むものです。ライブデモはこちら.dog$

于 2013-10-18T16:30:24.423 に答える