ホームページ  >  記事  >  バックエンド開発  >  re.sub が re.MULTILINE ですべての出現箇所を置き換えないのはなぜですか?

re.sub が re.MULTILINE ですべての出現箇所を置き換えないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-05 15:48:02810ブラウズ

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

re.sub と re.MULTILINE がすべての出現箇所を置換しない理由

Python の re.sub 関数。ベースのテキスト置換を実行するように設計されています。正規表現では、キャレット文字 (^) の一致動作を拡張するために、re.MULTILINE フラグとともによく使用されます。ただし、このフラグを使用してパターンのすべての出現を置換しようとすると、予期しない結果が発生する可能性があります。

問題の理解:

re.MULTILINE の公式ドキュメントには次のように記載されています。文字列内の各行の先頭でキャレット文字が一致できるようにする必要があります。ただし、次の例では、すべての "// " が期待どおりに削除されるわけではありません。

解決策:

矛盾は使用法にあります。 re.MULTILINE フラグの。デフォルトでは、 re.sub の 4 番目の引数はフラグではなくカウントとして解釈されます。この問題を解決するには、以下に示すように、引数という名前のフラグを明示的に使用できます。

あるいは、正規表現を re.compile 関数でプリコンパイルして、re.MULTILINE フラグを組み込むこともできます。

flags 引数を指定するか、目的のフラグを使用して正規表現をプリコンパイルすることにより、re.sub 関数は正しく置き換えます。改行に関係なく、パターンのすべての出現。

以上がre.sub が re.MULTILINE ですべての出現箇所を置き換えないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。