正则表达式挂在正则表达式字符上

时间:2018-07-19 00:29:33

标签: regex python-3.x

该错误使我回避了一段时间,因为我在此段中的代码始终有效,并且随机停止了工作。我的数据每天都在增长,所以每次运行代码时都会引入一个新的测试用例。该代码从新行的开头抓取一些文本中的“主题”名称,因此代码如下:

m = re.search(("[\r\n]+(.*)" + name), node.getIntroText())

但是...当前一批案件中的名称在某一时刻是:“ +∞” 因此正则表达式永远不会结束。但是我知道将来会有越来越多的这些奇怪的名称类型出现,所以有一种方法可以确保将所有名称都读取为“ name”变量包含或不包含的文字字符在这行代码上运行条件代码?

编辑:运行代码的示例:

name = 'Hello'

node.getIntroText() = '
                       well Hello there
                       little buddy
                       '

输出完全符合预期并可以打印:

'well Hello'

但使用

name = "+∞"

node.getIntroText() = '
                       This value: +∞ is
                       WACK!
                       '

该代码将永远挂起并且永远不会结束。我认为是因为它在正则表达式中将+∞读取为某种命令?

EDIT2:问题是'+'没有被转义,并且正则表达式将'+'读取为特殊字符。我想知道是否有一种方法可以确保可以将“ name”中包含的随机字符串始终检查为文字字符而不是特殊字符。我可以只写“ name.replaceAll('+','\ +')”,但我希望不必为每个字符串和每个特殊字符都这样做。有没有更简单的方法,例如正则表达式中的特殊字符,说:将所有后续字符都视为文字字符?

1 个答案:

答案 0 :(得分:2)

您可以使用re.escape()在正则表达式中转义字符串文字:

import re
text = '''
                       This value: +∞ is
                       WACK!
                       '''
name = "+∞"
print(re.search(("[\r\n]+(.*)" + re.escape(name)), text))

这将输出:

<_sre.SRE_Match object; span=(0, 38), match='\n                       This value: +∞'>