该错误使我回避了一段时间,因为我在此段中的代码始终有效,并且随机停止了工作。我的数据每天都在增长,所以每次运行代码时都会引入一个新的测试用例。该代码从新行的开头抓取一些文本中的“主题”名称,因此代码如下:
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('+','\ +')”,但我希望不必为每个字符串和每个特殊字符都这样做。有没有更简单的方法,例如正则表达式中的特殊字符,说:将所有后续字符都视为文字字符?
答案 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: +∞'>