了解正則表達式中的重疊匹配
預設情況下,Python re 模組中的findall() 方法不會捕獲字串中的重疊匹配。這種行為可能會令人困惑,特別是當匹配由連續字元組成時。
考慮以下程式碼:
match = re.findall(r'\w\w', 'hello') print(match)
輸出:
['he', 'll']
此模式符合兩個連續的字元單字字元 (w)。果然,他和我回來了。然而,el 和 lo 並沒有被捕獲,儘管出現在字串中。
克服重疊匹配
要捕獲重疊匹配,我們可以使用前瞻斷言 (?= ...)。此斷言會匹配特定模式,但不消耗字串中的任何字元。相反,它檢查以下字元是否與斷言匹配。
例如:
match1 = re.findall(r'(?=(\w\w))', 'hello') print(match1)
輸出:
['he', 'el', 'll', 'lo']
在這種情況下,(?=(ww )) 匹配存在兩個連續單字字元的任何位置,而不實際消耗它們。這允許 findall() 傳回重疊和非重疊匹配。
說明
正規表示式/(?=(ww)) 可以分解如下:
透過使用這種方法,我們可以有效地檢測字串中的所有重疊匹配,即使它們由連續字元組成。
以上是如何使用 Python 的 `re.findall()` 來尋找重疊匹配項?的詳細內容。更多資訊請關注PHP中文網其他相關文章!