2017-11-09 7 views
1

正規表現がそれ自身の内容と正確に一致するかどうかを調べたいと思います。私の目標は、任意の正規表現を単純な文字列比較で置き換えることができるかどうかを判断することです。正規表現が正確かどうかを判断する方法

たとえば、正規表現

^abc123$ 

は正確に文字列「ABC123」と他には何が一致するので、私たちはinput == "abc123"文字列の比較でそれを置き換えることができます。

この正規表現は、他の一方で、自分自身にマッチする、だけでなく、はるかに

^a.*3$ 

試合: "A3"、 "afoo3"、 "* 3。"。これはではなくinput =="a.*3"の文字列比較で置き換えることができます。

正規表現が単一の正確な文字列にのみ一致するかどうかを判断する最良の方法はありますか?私が探すことができる制御文字の完全なリストはありますか?

+2

むしろ単純:あなたは数量詞( '+'、 '*'、 '{N、M} ')または代替(' [AEIOU] '文字クラス)をした後(特定の場所をアサートする)ルックアサインや文字列比較では、それ以上は十分ではありません。 – Jan

答えて

2

正規表現をサポートするほとんどのプログラミング言語には、文字列内の特殊正規表現文字をエスケープするためのヘルパー関数が必要です。その関数を文字列に適用し、エスケープされたバージョンが元のものと同じであるかどうかを確認してください(^...$なし)。 Pythonで

例:

>>> s = "abc123" 
>>> re.escape(s) == s 
True 
>>> s = "a.*3" 
>>> re.escape(s) == s 
False 
+0

補遺:当然のことながら、特殊正規表現を使用しても正規表現であるとは限りません。これは、実際には正規表現のゴルファーや正規表現の興味深い変種かもしれません。 –

+0

これは素晴らしいです。私がチェックしなければならなかった唯一のものは、正規表現フラグでした。たとえば、グローバル( 'g')や大文字小文字を区別しない(' i')マッチングなどです。 – mark

+0

実際には別の注意点があります:regexに '\\ *'のようなエスケープされた正規表現の文字が含まれている場合、それらの文字は再びエスケープされます(少なくともPythonはこれを行います。 )。だから、エスケープされた(!)特殊正規表現の文字で正規表現自体は一致するだけで、 're.escape'によって変更(エスケープ)されます。 –

関連する問題