2016-05-15 78 views
0

在python中創建正則表達式時,有沒有辦法忽略特殊字符的含義?換句話說,採取字符串「原樣」。在python中創建正則表達式時忽略特殊字符

我正在編寫內部使用expect方法的Telnet對象,該對象只接受正則表達式。因此,答案不能是明顯的「使用==而不是正則表達式」。

我想這

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文檔中的選項,但無法找到更簡單的方法。或者有沒有我的解決方案沒有涵蓋的任何情況(我用python文檔構建SPECIAL_CHARACTERS)?

P.S.這個問題可以適用於其他圖書館。它不適用於pexpect庫,因爲它提供瞭解決此問題的expect_exact方法。但是,有人可能想要指定混合字符串(按原樣)和正則表達式。

+0

'結果= result.replace( c,'\\\\'+ c)' –

+3

re.escape不起作用? – e4c5

+0

在引號前加'r',如'raw_message = r'\ try \ this \ raw \ message''。 –

回答

0

如果'reg'是正則表達式,你必須使用一個原始字符串如下

pat = re.compile(r'reg') 

如果reg是綁定到一個正則表達式str的名稱,使用

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

're.escape()'方法解決了這個問題。我接受了你的答案。 –