對於一個典型的一組詞後綴(ize,fy,ly,able ......等),我想知道給定的單詞是否以它們中的任何一個結尾,然後將它們刪除。我知道這可以用word.endswith('ize')來迭代地完成,但我相信有一個更好的正則表達方式。嘗試使用結束標記$進行正面預測,但由於某種原因無法正常工作:python正則表達式後綴匹配
pat='(?=ate|ize|ify|able)$'
word='terrorize'
re.findall(pat,word)
對於一個典型的一組詞後綴(ize,fy,ly,able ......等),我想知道給定的單詞是否以它們中的任何一個結尾,然後將它們刪除。我知道這可以用word.endswith('ize')來迭代地完成,但我相信有一個更好的正則表達方式。嘗試使用結束標記$進行正面預測,但由於某種原因無法正常工作:python正則表達式後綴匹配
pat='(?=ate|ize|ify|able)$'
word='terrorize'
re.findall(pat,word)
你要找的實際上是(:)
檢查了這一點:
re.sub(r"(?:ate|ize|ify|able)$", "", "terrorize")
看一看這個網站Regex。
有一些有用的正則表達式技能。希望你喜歡它。
順便說一句,python庫本身是一個整潔的&奇妙的教程。
我的幫助()有很多:)
先行是一個錨紋,就像^
和$
錨匹配到一個特定的位置,但本身不匹配。
您想來匹配這些後綴,但在詞的結尾,所以用這個詞邊緣錨\b
代替:
r'(ate|ize|ify|able)\b'
然後用re.sub()
,以取代那些:
re.sub(r'(ate|ize|ify|able)\b', '', word)
其中工作得很好:
>>> word='terrorize'
>>> re.sub(r'(ate|ize|ify|able)\b', '', word)
'terror'
你需要調整parenthese,只是改變從pat
:
(?=ate|ize|ify|able)$
到:
(?=(ate|ize|ify|able)$)
如果需要在稍後刪除了後綴,您可以使用模式:
^(.*)(?=(ate|ize|ify|able)$)
測試在REPL:
>>> pat = '^(.*)(?=(ate|ize|ify|able)$)'
>>> word = 'terrorize'
>>> re.findall(pat, word)
[('terror', 'ize')]
如果是逐字匹配,那麼只需刪除前瞻檢查,插入符號就足夠了。
鮮爲人知的事實:endswith
接受的可能性元組:
if word.endswith(('ate','ize','ify','able')):
#...
不幸的是,它並不表示該字符串被發現,所以它不」幫助刪除後綴。
+1新信息 – hmghaly 2013-02-23 14:53:26