「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Python 正規表現で接頭辞「r」が欠落している場合があるのはなぜですか?

Python 正規表現で接頭辞「r」が欠落している場合があるのはなぜですか?

2024 年 11 月 7 日に公開
ブラウズ:112

Why is the \'r\' Prefix Sometimes Missing in Python Regex?

Python 正規表現: 'r' プレフィックスの謎

Python の正規表現の領域では、謎の 'r' プレフィックスがその必要性についての疑問を引き起こすことがよくあります。 。このトピックを明らかにするために、不可解なシナリオを掘り下げてみましょう:

欠落した 'r' の奇妙なケース

例 1 では、不可解な観察結果が示されました:

import re

print(re.sub('\s ', ' ', 'hello     there      there'))

接頭辞「r」が省略されているにもかかわらず、このコードは複数の空白文字を単一のスペースに置き換えることに成功しました。エスケープ シーケンスを使用する場合、接頭辞「r」は必須ではないでしょうか?

真実を明らかにする: エスケープ シーケンスの謎を解く

この現象を理解する鍵は複雑さにありますエスケープシーケンスの。正規表現では、特定の文字 (空白の \s など) が特殊文字を表すエスケープ シーケンスとして機能します。ただし、エスケープ シーケンスは、有効なエスケープ シーケンスの組み合わせを表す場合にのみアクティブになります。

例 1 では、「\s」は認識されたエスケープ シーケンスに遭遇しないため、リテラルの '\s' (バックスラッシュが後に続きます) として扱われます。さんによる)。この動作は、エスケープ シーケンスの組み合わせが認識された場合にのみエスケープ シーケンスが解釈されるという、Python 文字列の一般規則に準拠しています。

「r」プレフィックスの影響

]「r」接頭辞は異なる動作を引き起こします。エスケープ シーケンスの解釈を効果的に抑制し、エスケープ文字を含むすべての文字を文字通りに扱います:

import re

print(re.sub(r'(\b\w )(\s \1\b) ', r'\1', 'hello     there      there'))

例 2 では、'r ' プレフィックスを使用すると、エスケープ文字が文字通りに解釈されるようになり、正規表現で繰り返しの単語置換を正しく実行できるようになります。

一貫性と例外

例 3 に注意することが重要です。 「r」接頭辞を付けない場合も、期待どおりの結果が得られます。この動作は、正規表現と正規文字列の両方における Python の文字列処理ルールの一貫性に起因します。ただし、リテラルのバックスラッシュを使用すると意図しない結果が生じる可能性があるため、これに依存すべきではありません。式は、エスケープ シーケンスを文字通りに扱うことにより、一貫した動作を保証します。わかりやすくし、予期しない結果を避けるために、一般に「r」接頭辞を使用することをお勧めしますが、これを省略すると望ましい結果が得られるシナリオもあります。ただし、情報に基づいた意思決定を行うには、エスケープ シーケンスの根本的な動作を理解することが重要です。

リリースステートメント この記事は次の場所に転載されています: 1729328537 権利侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3