正则表达式查找字符串中的最后一个单词(Python)

时间:2013-10-18 16:20:42

标签: python regex

我正在尝试编写一个简单的正则表达式,用于查找字符串中的最后一个单词是否为特定单词。

我写了类似"(\W|^)dog$"的内容。 (检查句子中的最后一个单词是否是狗)

这个正则表达式是正确的但是在python中,当我输入类似"I like dog"的内容时,它什么也没有返回。

我在Rubular正则表达式编辑器中对此进行了测试,似乎有效。

我做错了吗?

编辑:添加我的简单代码

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

3 个答案:

答案 0 :(得分:18)

这里你不需要正则表达式。简单的拆分将完成这项工作:

>>> 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是单词边界。 See Live Demo

要对re.match执行相同操作,您的正则表达式应为 - r".*dog$"

pm = re.compile(r".*dog$")
has = pm.match("i love dog")

答案 1 :(得分:1)

这里稍微修改了您的代码(有效):

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

正则表达式.*\b(dog)$匹配任何内容(.*),然后是单词边界(\b),然后是您的单词(dog),然后是行尾($) {1}})。这正是你想要的。现场演示here

答案 2 :(得分:0)

在字符串的末尾获取单词。无论那个词是什么。

import re
pattern = re.compile(r"(\w+)$")
has = pm.search("i love dog")
print has.group(0)