1. ホーム
  2. パイソン

[解決済み】 正規表現文字列のエスケープ

2022-03-30 18:41:35

質問

ユーザーからの入力を正規表現のパターンとして使用し、あるテキストを検索したいのですが、どうすればいいですか? うまくいくのですが、ユーザーが意味を持つ文字を正規表現に入れた場合、どのように対処すればよいでしょうか?

例えば、ユーザーがWordの検索をしたい場合 (s) を、正規表現エンジンは (s) をグループとして扱います。 文字列のように扱わせたい "(s)" . 私は実行することができます replace をユーザ入力に置き換えて (\( と、その )\) しかし、問題は、可能な限りの正規表現シンボルに対して置換を行う必要があることです。

何か良い方法をご存知ですか?

解決方法は?

を使用します。 re.escape() 関数を使用します。

4.2.3 re モジュールコンテンツ

エスケープ(文字列)

正規表現のメタキャラクタを含む任意のリテラル文字列にマッチさせたい場合に有効です。

単純化した例では、与えられた文字列の後に 's' が続くものを検索し、マッチオブジェクトを返します。

def simplistic_plural(word, text):
    word_or_plural = re.escape(word) + 's?'
    return re.match(word_or_plural, text)