首頁 >後端開發 >Python教學 >為什麼 `re.sub` 和 `re.MULTILINE` 不取代所有出現的情況?

為什麼 `re.sub` 和 `re.MULTILINE` 不取代所有出現的情況?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-05 17:37:02615瀏覽

Why Doesn't `re.sub` with `re.MULTILINE` Replace All Occurrences?

Python 的re.sub 和re.MULTILINE 標誌無法替換所有出現

Python 文件表明re.MULTILINE 文件表明,當指定,允許標誌“^”模式在字串的開頭和每行的開頭匹配。然而,當將此標誌與 re.sub 一起使用時,會出現令人困惑的行為。

考慮以下程式碼:

<code class="python">import re

s = """// The quick brown fox.
... // Jumped over the lazy dog."""

print(re.sub('^//', '', s, re.MULTILINE))</code>

此程式碼旨在刪除所有出現的「//」註解每行的開頭。然而,輸出意外地留下了一個未發生的事件:

 The quick brown fox.
// Jumped over the lazy dog.

理解問題

此行為的原因在於錯誤使用了第四個參數重新子功能。此參數旨在指定要替換的匹配項計數,而不是作為標誌。在給定的程式碼中,re.MULTILINE(值為 8)被用作計數,而不是標誌。

修正程式碼

至解這個問題,有兩種可能的方法:

  • 使用命名參數:
<code class="python">print(re.sub('^//', '', s, flags=re.MULTILINE))</code>
  • 編譯正規表示式優先:
<code class="python">print(re.sub(re.compile('^//', re.MULTILINE), '', s))</code>
這兩種方法都正確使用.MULTILINEre.MULTILINE作為標誌,從而產生所需的行為:

以上是為什麼 `re.sub` 和 `re.MULTILINE` 不取代所有出現的情況?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn