2016-05-15 84 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()'方法解决了这个问题。我接受了你的答案。 –