ホームページ > バックエンド開発 > Python チュートリアル > 私の Python `re.search()` が `\b` を使用して単語の境界を見つけないのはなぜですか?

私の Python `re.search()` が `\b` を使用して単語の境界を見つけないのはなぜですか?

Linda Hamilton
リリース: 2024-12-06 04:13:17
オリジナル
1028 人が閲覧しました

Why Doesn't My Python `re.search()` Find Word Boundaries Using `b`?

単語境界 (b) 正規表現でのサポート

Python では、正規表現を利用して文字列内のパターンを見つけて一致させることができます。正規表現を調べているときに、b 式を利用して単語の境界を一致させるという提案に気づいたかもしれません。ただし、このアプローチによって予期しない結果が生じる場合があります。

問題

次の Python スニペットを考えてみましょう。

x = 'one two three'
y = re.search("\btwo\b", x)
ログイン後にコピー

予想通り、このコードは、文字列内で一致が見つかった場合に一致オブジェクトを返す必要があります。ただし、驚くべきことに None が返されます。これにより、次のような疑問が生じます: Python re モジュールは、単語の境界を一致させるための b の使用をサポートしていませんか?

解決策

指定されたスニペットの問題は、通常の文字列の使用。正規表現が正しく機能するには、生の文字列を利用することが重要です。生の文字列は、以下に示すように、文字列の前に「r」を付けることで示されます。

x = 'one two three'
y = re.search(r"\btwo\b", x)
ログイン後にコピー

文字列を生の文字列に変更すると問題が解決され、コードは一致オブジェクトを正常に返します。

代替アプローチ

単語境界を一致させるための代替アプローチは、 re.compile() 関数。この関数を使用すると、複数の検索に再利用できる正規表現オブジェクトを定義できるため、効率が向上する可能性があります。

word = 'two'
k = re.compile(r'\b%s\b' % word, re.I)
x = 'one two three'
y = k.search(x)
ログイン後にコピー

この場合、変数 k はコンパイルされた正規表現オブジェクトを表し、y には一致が含まれます。物体。 re.compile() を使用すると、柔軟性とパフォーマンス上の利点が得られるため、複雑な正規表現シナリオに適した選択肢となります。

以上が私の Python `re.search()` が `\b` を使用して単語の境界を見つけないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート