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因此可用于从结尾开始拆分,并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 回答
0

获取字符串末尾的单词。不管那个词是什么。

import re
pattern = re.compile(r"(\w+)$")
has = pm.search("i love dog")
print has.group(0)
于 2016-01-20T15:59:10.037 回答