2013-10-18 127 views
4

我想寫一個簡單的正則表達式來查找字符串中的最後一個單詞是否是特定的單詞。正則表達式來查找字符串中的最後一個單詞(Python)

我寫了類似"(\W|^)dog$"的東西。 (檢查句子中的最後一個單詞是否爲狗)

這個正則表達式是正確的,但在python中,當我輸入類似"I like dog"的東西時它什麼也沒有返回。

我在Rubular regex編輯器中測試了它,它似乎工作。

我做錯了什麼?

編輯:我添加簡單的代碼

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

你的話總是空間分開嗎? –

+0

發佈您的Python代碼。 –

+0

是的。沒有hypenated字需要>也FYI我試過(| ^)狗$相同的結果! –

回答

17

你並不需要在這裏正則表達式。簡單的拆分將做的工作:

>>> 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

謝謝Jain先生。但是這個簡單的正則表達式是我爲即將到來的訪談修改正則表達式的方式,因此我有興趣知道如何通過python來完成它。 –

+0

@rajaditya_m您應該使用're.search'方法而不是're.match'。 –

+0

太棒了。我只是改變了匹配搜索我的舊正則表達式,它也可以。 (在這種情況下,至少)。 –

1

這裏是你的代碼稍加修改(的作品):

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

.*\b(dog)$ maches任何東西(.*),然後一個字boundry(\b),然後你的話(dog),然後正則表達式該行的結尾($)。這正是你想要的。現場演示here

0

獲取字符串末尾的單詞。無論那個詞是什麼。

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