我想匹配字符串中最後一個簡單模式的出現次數,例如:查找python正則表達式的最後一個匹配項
list = re.findall(r"\w+ AAAA \w+", "foo bar AAAA foo2 AAAA bar2")
print "last match: ", list[len(list)-1]
然而,如果字符串是很長,產生了巨大的匹配列表。有沒有更直接的方法來匹配第二次出現「AAAA」或我應該使用這種解決方法?
我想匹配字符串中最後一個簡單模式的出現次數,例如:查找python正則表達式的最後一個匹配項
list = re.findall(r"\w+ AAAA \w+", "foo bar AAAA foo2 AAAA bar2")
print "last match: ", list[len(list)-1]
然而,如果字符串是很長,產生了巨大的匹配列表。有沒有更直接的方法來匹配第二次出現「AAAA」或我應該使用這種解決方法?
你可以使用$
是表示行結束符:
>>> s = """foo bar AAAA
foo2 AAAA bar2"""
>>> re.findall(r"\w+ AAAA \w+$", s)
['foo2 AAAA bar2']
此外,請注意list
是你變一個不好的名字,因爲它陰影內置式。要訪問列表的最後一個元素,你可以只使用[-1]
指數:
for match in re.finditer(r"\w+ AAAA \w+", "foo bar AAAA foo2 AAAA bar2"):
pass
後:
>>> lst = [2, 3, 4]
>>> lst[-1]
4
如果我遇到多行字符串,該怎麼辦? – SDD 2010-05-10 11:26:30
@SDD:它仍然可以正常工作 – SilentGhost 2010-05-10 11:28:11
這不適用於像這樣的輸入字符串:「foo bar AAAA foo2 AAAA bar2 bar3」。當然,我們不知道這樣的情況是否可能,我們沒有足夠的信息。 – tzot 2010-06-21 15:31:19
你能夠通過遍歷所有的匹配並保持最後一場比賽避免列表建設這,match
舉行最後一場比賽,並適用於模式和所有組合的搜索字符串。您可能首先要將match
設置爲None
,因爲如果沒有匹配,則match
將不會設置爲任何值。
這在很多使用案例中都非常有用。您通常會想要替換所有出現的模式,然後自定義處理輸入字符串的最後部分。 – 2013-07-17 12:17:26
另一種選擇可能是顛倒字符串('mystr [:: - 1]')並搜索模式反轉的第一次出現。 – ChristopheD 2010-05-10 11:39:50
@ChristopheD,毛!只有比正則表達式更難理解的東西是一個倒退的東西。 – mlissner 2014-07-02 17:45:30