2016-05-15 3 views
0

Pythonで正規表現を作成するときに特殊文字の意味を無視する方法はありますか?言い換えれば、文字列を「そのまま」とします。Pythonで正規表現を作成するときに特殊文字を無視する

Telnetオブジェクトのexpectメソッドを内部的に使用するコードを記述しています。このコードは正規表現のみを受け入れます。したがって、答えは明らかな "正規表現の代わりに==を使用"することはできません。

私は最初のものは、文字列を認識しない、2つ目がないのでそれは、作品

import re 

SPECIAL_CHARACTERS = "\\.^$*+?{}[]|():" # backslash must be placed first 
def str_to_re(s): 
    result = s 
    for c in SPECIAL_CHARACTERS: 
    result = result.replace(c,'\\'+c) 
    return re.compile(result) 

TEST = "Bob (laughing). Do you know 1/2 equals 2/4 [reference]?" 
re_bad = re.compile(TEST) 
re_good = str_to_re(TEST) 

print re_bad.match(TEST) 
print re_good.match(TEST) 

これを試してみました。私はPythonのドキュメントのオプションを見て、簡単な方法を見つけることができませんでした。または、私の解決策がカバーしないケースがありますか(私はSPECIAL_CHARACTERSをビルドするためにPythonのドキュメントを使用しました)?

P.S.この問題は、他のライブラリにも当てはまります。これは、この問題を解決する方法expect_exactを提供するので、pexpectライブラリには適用されません。しかし、誰かが文字列(そのまま)と正規表現の組み合わせを指定したいと思うかもしれません。

+0

'結果= result.replaceを(使用し、生の文字列を使用して得ましたc、 '\\\\' + c) ' –

+3

re.escapeは機能しませんか? – e4c5

+0

'raw_message = r '\ try \ this \ raw \ message''のように、引用符の前に' r'を追加してください。 –

答えて

0

'reg'が正規表現である場合、あなたは

pat = re.compile(r'reg') 

を次のようにregが正規表現strにバインドされた名前である場合

reg = re.escape(reg) 
pat = re.compile(reg) 
+0

're.escape()'メソッドは問題を解決します。私はあなたの答えを受け入れた。 –

関連する問題