在 python 中创建正则表达式时忽略特殊字符
Ignore special characters when creating a regular expression in python
在python中创建正则表达式时,有没有办法忽略特殊字符含义?换句话说,取字符串 "as is".
我正在编写的代码在内部使用 Telnet
对象的 expect
方法,它只接受正则表达式。因此,答案不可能是显而易见的 "use ==
instead of regular expression".
我试过了
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
方法。但是,有人可能想要指定字符串(按原样)和正则表达式的混合。
如果 'reg'
是正则表达式,您必须使用如下原始字符串
pat = re.compile(r'reg')
如果 reg
是绑定到正则表达式 str
的名称,请使用
reg = re.escape(reg)
pat = re.compile(reg)
在python中创建正则表达式时,有没有办法忽略特殊字符含义?换句话说,取字符串 "as is".
我正在编写的代码在内部使用 Telnet
对象的 expect
方法,它只接受正则表达式。因此,答案不可能是显而易见的 "use ==
instead of regular expression".
我试过了
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
方法。但是,有人可能想要指定字符串(按原样)和正则表达式的混合。
如果 'reg'
是正则表达式,您必须使用如下原始字符串
pat = re.compile(r'reg')
如果 reg
是绑定到正则表达式 str
的名称,请使用
reg = re.escape(reg)
pat = re.compile(reg)