【问题标题】:Ignore special characters when creating a regular expression in python [duplicate]在python中创建正则表达式时忽略特殊字符[重复]
【发布时间】: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'

标签: python regex telnetlib


【解决方案1】:

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

pat = re.compile(r'reg')

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

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

【讨论】:

  • 方法re.escape()解决了这个问题。我接受了你的回答。
猜你喜欢
  • 1970-01-01
  • 2021-10-09
  • 2015-06-25
  • 2013-08-13
  • 1970-01-01
  • 2014-03-04
  • 2012-11-15
  • 1970-01-01
  • 2014-02-04
相关资源
最近更新 更多