ホームページ >バックエンド開発 >Python チュートリアル >正規表現の単語境界 (\b) が特殊文字で誤動作するのはなぜですか?

正規表現の単語境界 (\b) が特殊文字で誤動作するのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-09 05:26:17613ブラウズ

Why Do Regular Expression Word Boundaries (b) Misbehave with Special Characters?

特殊文字を含む式の単語境界の動作

正規表現を使用して単語を照合する場合、特に単語に特殊文字が含まれている場合、b 境界パターンによって予期しない結果が生じることがあります。

「test Sortesindex[persons]{Sortes} text」というフレーズを考えてみましょう。 bb を使用して完全なフレーズを照合すると、「Sortes」などのフレーズのみでの照合が防止されます。ただし、これは単語境界の特定の特性により発生しません。

b 特殊文字による動作

形式的には、b は単語文字 (w) と単語以外の文字の間の境界と一致します。 (W)、または文字列の先頭/末尾。単語境界パターンの直後に [ や } などの特殊文字が続く場合、 b には特殊文字の後の単語文字のみが必要です。

解決策: 適応型または明確な単語境界

に対処するにはこの問題では、適応型単語境界または明確な単語境界を使用できます。

適応型単語境界 は、パターンの両側にある単語文字と単語以外の文字の任意の組み合わせを処理します。

re.search(r'(?:(?!\w)|\b(?=\w)){}(?:(?<=\w)\b|(?<!\w))'.format(re.escape('Sortes\index[persons]{Sortes}')), 'test Sortes\index[persons]{Sortes} test')

明確な単語境界 は、パターンの両側に単語文字を必要としません。

re.search(r'(?<!\w){}(?!\w)'.format(re.escape('Sortes\index[persons]{Sortes}')), 'test Sortes\index[persons]{Sortes} test')

適切な境界タイプの選択

適応型単語境界はより多用途になりますただし、先頭と末尾の非単語文字は許可されます。明確な単語境界はより厳密で、周囲に単語文字が存在しないようにします。

カスタマイズ

適応的で明確な単語境界に使用されるルックアラウンド パターンは、マッチング タスクの特定の要件に基づいてカスタマイズできます。たとえば、パターンの周囲の文字以外の文字のみを一致させるには、w.

の代わりに [^Wd_] を使用します。

以上が正規表現の単語境界 (\b) が特殊文字で誤動作するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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