Python:如何强制字符串文字而不被解释为正则表达式模式

时间:2017-09-28 19:32:39

标签: python regex

我想在段落中找到所有出现的给定短语。短语是用户输入,无法事先预测。

一种解决方案是使用正则表达式搜索(findall,finditer)段落中的短语:

import re

phrase = "24C"
passage = "24C with"

inds = [m.start() for m in re.finditer(phrase, passage)]

然后结果是

inds = [0]

因为短语匹配索引0处的段落,并且只出现一次。

但是,当短语包含在正则表达式中具有特殊含义的字符时,事情就会变得棘手

import re

phrase = "24C (75F)"
passage = "24C (75F) with"

inds = [m.start() for m in re.finditer(phrase, passage)]

然后结果是

inds = []

这是因为括号被特别解释为正则表达式模式,但这不可取,因为我只想要文字匹配。

无论如何要强制将短语视为字符串文字,而不是正则表达式模式?

1 个答案:

答案 0 :(得分:4)

您可以使用re.escape()强制正则表达式将字符串视为文字:

import re
phrase = "24C (75F)"
passage = "24C (75F) with"
inds = [m.start() for m in re.finditer(re.escape(phrase), passage)]
print(inds)

输出:

[0]