Python 如何在一行中搜索带有特殊符号的字符串

Python 如何在一行中搜索带有特殊符号的字符串,python,regex,Python,Regex,我有一个“实体集”,其中包含数千个实体名称,例如: [“CQ”、“Pi”、“+1”、“M”] 有些行包含一个实体,例如 line1=“M是什么?” line2=“谁写+1?” 我正在使用re.search()来匹配它,但当它与“+1”匹配时,我遇到了一个错误: sre_constants.error:在位置0处没有要重复的内容 原因是“+1”包含特殊符号“+” 这是我的密码: 对于行中的行: 对于实体集合中的实体: 如果重新搜索(r'{0}\s'。格式(实体),行: 声明 如何修复我的代码?任

我有一个“实体集”,其中包含数千个实体名称,例如:

[“CQ”、“Pi”、“+1”、“M”]

有些行包含一个实体,例如

line1=“M是什么?”

line2=“谁写+1?”

我正在使用
re.search()
来匹配它,但当它与“+1”匹配时,我遇到了一个错误:

sre_constants.error:在位置0处没有要重复的内容

原因是“+1”包含特殊符号“+”

这是我的密码:

对于行中的行:
对于实体集合中的实体:
如果重新搜索(r'{0}\s'。格式(实体),行:
声明
如何修复我的代码?任何帮助都将不胜感激。

试试这个

for line in lines:
   for entity in entity_set:
       if re.search(r'\s{0}\s'.format(re.escape(entity)), line):
            ...

另一种选择是:

entities = ["CQ", "Pi", "+1", "M"]
lines = ["What is M ?", "Who writes +1 ?"]
print([entity for entity in entities for line in lines if entity in line])
输出
任何时候在regexp中使用文字文本(即不应被regexp引擎解释的文本),请首先通过
re.escape

re.search(r'{0}\s'.format(re.escape(entity)), line)

但在操作中可能与子字符串匹配。“1”和“+1”都在我的实体列表中。我更改了答案,请查看!但在操作中可能与子字符串匹配。“1”和“+1”都在我的实体列表中。谢谢@Amadan。这就是我需要的。当一个“1”是一个实体时,它也会抓住“谁写+1”这一行。您必须在此表达式前面添加\s。@raze92这实际上取决于您想做什么。如果只需要一个匹配项,我可能会按长度降序对实体进行排序,并在找到一个匹配项时将其打断。如果需要多个不重叠的实体,我会使用
re.findall
替换所有实体(同样,按降序长度排序)。但这不是问题所在。问题是“如何在一行中搜索带有特殊符号的字符串”。
re.search(r'{0}\s'.format(re.escape(entity)), line)