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

Mary-Kate Olsen
發布: 2024-11-05 17:37:02
原創
530 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!