ホームページ  >  記事  >  バックエンド開発  >  Python の正規表現で `re.sub(r\'(foo)\', r\'\\1123\', \'foobar\')` が \"foo123bar\" を生成しないのはなぜですか?

Python の正規表現で `re.sub(r\'(foo)\', r\'\\1123\', \'foobar\')` が \"foo123bar\" を生成しないのはなぜですか?

DDD
DDDオリジナル
2024-11-03 22:19:30725ブラウズ

Why does `re.sub(r'(foo)', r'23', 'foobar')` not produce

Python 正規表現の混乱: グループ番号付き後方参照による置換

正規表現を使用して "foobar" を "foo123bar" に置き換えようとすると、予期しない結果に遭遇する可能性があります。 re.sub(r'(foo)', r'1123', 'foobar') のような置換は、目的の出力を生成できず、代わりに「J3bar」を返します。

問題を理解するには、次のことが重要です。グループ番号の後方参照とリテラル数字の違いに注意してください。この場合、1123 は、「1123」を最初のキャプチャ グループへの参照としてではなく、リテラル文字列として扱います。その結果、置換は意図したとおりに機能しません。

正しい置換を実現するには、構文 g を使用する必要があります。ここで、「number」はグループ番号を指します。例:

re.sub(r'(foo)', r'\g<1>123', 'foobar')

この場合、g<1>最初のグループと一致する部分文字列 (入力からの文字列「foo」) をキャプチャします。適切なグループ番号後方参照を使用すると、置換が正しく実行され、出力「foo123bar」が得られます。

この動作については、g の使用について説明している Python ドキュメントで説明されています。名前付きグループを指定します。グループ番号の場合、gを使用すると、対応するグループを曖昧さなく参照でき、リテラル数字によって引き起こされる潜在的な混乱を回避できます。

以上がPython の正規表現で `re.sub(r\'(foo)\', r\'\\1123\', \'foobar\')` が \"foo123bar\" を生成しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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