在python中创建正则表达式时忽略特殊字符

时间:2016-05-15 14:42:14

标签: python regex telnetlib

在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 docs来构建SPECIAL_CHARACTERS)?

P.S。该问题可以适用于其他库。它不适用于pexpect库,因为它提供了解决此问题的expect_exact方法。但是,有人可能希望指定混合字符串(按原样)和正则表达式。

1 个答案:

答案 0 :(得分:0)

如果'reg'是正则表达式,则必须使用原始字符串,如下所示

pat = re.compile(r'reg')

如果reg是绑定到正则表达式str的名称,请使用

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