我想在段落中找到所有出现的给定短语。短语是用户输入,无法事先预测。
一种解决方案是使用正则表达式搜索(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 = []
这是因为括号被特别解释为正则表达式模式,但这不可取,因为我只想要文字匹配。
无论如何要强制将短语视为字符串文字,而不是正则表达式模式?
答案 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]