【发布时间】:2016-09-11 09:34:55
【问题描述】:
在python中创建正则表达式时,有没有办法忽略特殊字符的含义?换句话说,将字符串“原样”。
我正在编写在内部使用来自Telnet 对象的expect 方法的代码,该对象只接受正则表达式。因此,答案不可能是显而易见的“用==代替正则表达式”。
我试过了
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)?
附:该问题可能适用于其他库。它不适用于pexpect 库,因为它提供了解决此问题的expect_exact 方法。但是,有人可能想要指定字符串(原样)和正则表达式的混合。
【问题讨论】:
-
result = result.replace(c,'\\\\'+c) -
re.escape 不起作用?
-
在引号前添加
r,如raw_message = r'\try\this\raw\message'。