為什麼re.sub 和re.MULTILINE 不能取代所有出現的內容
Python 的re.sub 函數,旨在執行基於文字的替換在正規表示式上,通常與re.MULTILINE 標誌一起使用來擴展脫字符號(^) 的匹配行為。然而,當嘗試使用此標誌替換所有出現的模式時,可能會出現意想不到的結果。
理解問題:
re.MULTILINE 的官方文件說明它應該允許插入符號在字串中每行的開頭匹配。然而,在下面的範例中,並非所有出現的“//”都按預期被刪除:
import re s = """// The quick brown fox. // Jumped over the lazy dog.""" result = re.sub('^//', '', s, re.MULTILINE) print(result)
解決方案:
差異在於用法re>解決方案:
result = re.sub('^//', '', s, flags=re.MULTILINE)
差異在於用法re .MULTILINE 標誌。預設情況下,re.sub 的第四個參數被解釋為計數,而不是標誌。為了解決這個問題,可以明確使用名為參數的標誌,如下所示:
regex = re.compile('^//', re.MULTILINE) result = re.sub(regex, '', s)
或者,可以使用re.compile 函數預編譯正規表示式以合併re.MULTILINE 標誌:
透過指定flags 參數或使用所需標誌預先編譯正規表示式,re.sub 函數將正確取代所有出現的模式,無論換行符為何。以上是為什麼 re.sub 和 re.MULTILINE 不會替換所有出現的情況?的詳細內容。更多資訊請關注PHP中文網其他相關文章!