Python の re.MULTILINE フラグを使用した re.sub がすべての出現箇所を置換できない
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>
このコードは、次の場所にある「//」コメントをすべて削除することを目的としています。各行の先頭。ただし、出力では予期せず 1 つのオカレンスが変更されていません:
The quick brown fox. // Jumped over the lazy dog.
問題の理解
この動作の原因は、 re.sub関数。この引数は、フラグとしてではなく、置換する一致の数を指定することを目的としています。指定されたコードでは、re.MULTILINE (値が 8) がフラグではなくカウントとして使用されています。
コードの修正
問題を解決するには、次の 2 つのアプローチが考えられます。
<code class="python">print(re.sub('^//', '', s, flags=re.MULTILINE))</code>
<code class="python">print(re.sub(re.compile('^//', re.MULTILINE), '', s))</code>
これらのメソッドは両方とも re.MULTILINE をフラグとして正しく使用し、目的の動作をもたらします:
The quick brown fox. Jumped over the lazy dog.
以上が「re.sub」が「re.MULTILINE」ですべての出現箇所を置き換えないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。