Python 正規表現: エスケープ シーケンスには接頭辞 \'r\' が必須ですか?

Susan Sarandon
リリース: 2024-10-19 17:03:31
オリジナル
293 人が閲覧しました

Python regex: Is the

Python 正規表現: エスケープ シーケンスに必須の "r" プレフィックスの神話を暴く

質問

以下の最初の例は、なぜエスケープシーケンスの前に「r」プレフィックス?エスケープ シーケンスを扱うときは必須であるべきだと一般的に考えられています。

<code class="python"># example 1
import re
print(re.sub('\s+', ' ', 'hello     there      there'))
# prints 'hello there there' - not expected as r prefix is not used</code>
ログイン後にコピー

回答

「r」接頭辞を推奨する一般的な規則にもかかわらず、正規表現パターンでは接頭辞「r」が必ずしも必要というわけではありません。 use.

エスケープ シーケンスでは、バックスラッシュ () は、特別な文字シーケンスを解釈するか、特別な意味を持つ文字をエスケープするためのインジケーターとして機能します。ただし、バックスラッシュが前にあるすべてのシーケンスが有効なエスケープ シーケンスとみなされるわけではありません。

これを説明するために、次の例を考えてみましょう。

  • 'n' は、改行に対応するエスケープ シーケンスです。
  • r'n' は生の文字列リテラルで、バックスラッシュはリテラル文字として保持され、'n' はエスケープ シーケンスとして解釈されません。

の場合「r」プレフィックスはエスケープ シーケンスの前に存在しません。Python は、それが認識されたエスケープ シーケンスである場合にのみそれを解釈します。つまり、「s」のような無効なエスケープ シーケンスを解釈しようとしません。

この動作は、提供された最初の例で確認できます。

  • 's' は、有効なエスケープ シーケンス。
  • 「r」プレフィックスがありません。
  • 正規表現エンジンは、s を空白のエスケープ シーケンスとしてではなく、リテラル文字として解釈します。
  • その結果、パターンは 1 つ以上のスペース文字と一致し、1 つのスペースに置き換えます。

ただし、接頭辞「r」が使用されている場合は、パターン内のすべての文字が文字通りに解釈されます。これは、r' が文字 's' が後に続くリテラルのバックスラッシュ文字を表すことを意味します。

制限事項と落とし穴

「r」接頭辞はすべてのエスケープ シーケンスに厳密に必要というわけではありませんが、一般的には必須です。特に複数のエスケープ シーケンスを含む複雑なパターンを扱う場合は、これを使用することをお勧めします。これは混乱や予期せぬ結果を避けるのに役立ちます。

以上がPython 正規表現: エスケープ シーケンスには接頭辞 \'r\' が必須ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!