ホームページ >バックエンド開発 >Python チュートリアル >Python の `re` モジュールの `\b` が単語の境界と一致しないことがあるのはなぜですか?

Python の `re` モジュールの `\b` が単語の境界と一致しないことがあるのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-16 01:07:08396ブラウズ

Why Does `b` in Python's `re` Module Sometimes Fail to Match Word Boundaries?

Python 正規表現での b 単語境界の使用

正規表現は強力なパターン マッチング機能を提供し、単語境界 (b) は重要な役割を果たします一致のコンテキストを定義する際に。ただし、Python の re モジュールに b を適用すると、予期しない結果が生じるため疑問が生じます。

問題ステートメント

正規表現を試しているときに、b が失敗したように見える状況に遭遇する可能性があります。意図どおり。たとえば、次のスニペットを考えてみましょう:

x = 'one two three'
y = re.search("\btwo\b", x)

一致オブジェクトの期待にもかかわらず、 y は None と評価され、b の誤った使用法が示唆されます。

Solution

Python で単語の境界を正しく一致させるには、正規表現で生の文字列 (r がプレフィックス付き) を使用していることを確認してください。これにより、エスケープ文字が誤って解釈される可能性が排除されます。

x = 'one two three'
y = re.search(r"\btwo\b", x)

生の文字列を利用することで、b 構文が単語の境界として認識され、検索が成功します。

さらに、次のことができます。以下を考慮して、正規表現を使用した単語境界の一致を強化します。

  • compile メソッドで正規表現をコンパイルし、search または findall を使用して照合を実行します。このアプローチにより、複数の文字列を照合する際のパフォーマンスが向上します。
  • 大文字と小文字に関係なく単語の境界を照合するには、re.I フラグ (大文字と小文字を区別しない) を使用します。
word = 'two'
k = re.compile(r'\b%s\b' % word, re.I)
x = 'one two three'
y = k.search(x)

この例では、正規表現がコンパイルされ、文字列内の単語のバリエーション (例: "two" と "two") が受け入れられます。 "Two").

これらのニュアンスを理解すると、Python 正規表現アプリケーションで単語境界の可能性を最大限に活用できるようになります。

以上がPython の `re` モジュールの `\b` が単語の境界と一致しないことがあるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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