正規表現文字列のエスケープ 質問する

正規表現文字列のエスケープ 質問する

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

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

もっと良い方法をご存知ですか?

ベストアンサー1

これには次の関数を使用しますre.escape():

4.2.3reモジュールの内容

エスケープ(文字列)

すべての非英数字をバックスラッシュで区切った文字列を返します。これは、正規表現のメタ文字を含む可能性のある任意のリテラル文字列を一致させたい場合に便利です。

単純な例として、オプションで「s」が続く指定された文字列の出現を検索し、一致オブジェクトを返します。

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

おすすめ記事