我正在开发一个应用程序,我需要在文本正文中搜索和替换字符串。
我遇到this SO post并且一直使用第3个答案作为我的功能的基础。
我的代码如下:
subs_dict = {
"INT.": "Internet",
...
}
def substitutions(self, text):
return re.sub(
r'\b' + '|'.join(subs_dict.keys())
+ r'\b', lambda m: subs_dict[m.group(0)],
text
)
但是,"The INTREPID explorer"
这样的文字会因为Key Error
的{{1}}失败而被绊倒。
问题在于比较“INT”。被解释为“INT”,任何其他字符作为句点是特殊的。
我已使用此修改后的代码暂时解决了该问题:
INTR
允许对字段进行句子评估但保持字典键的完整性(而不是使用“INT [。]”作为将失败的键。
然而,这有一个难闻的气味,当然只关注期间,而不是任何其他特殊字符。
所以,我想我的问题是,如果有一种更好的方法可以起作用并从字面上评估任何特殊字符。
答案 0 :(得分:2)
更简洁的方法是在加入re.escape
之前使用{{3}}来转义实际字符串,就像这样
r'\b' + '|'.join(map(re.escape, subs_dict)) + r'\b'
例如,
>>> import re
>>> subs_dict = {"INT.": "Internet"}
>>> def substitutions(text):
... return re.sub(r'\b' + '|'.join(map(re.escape, subs_dict)) + r'\b',
... lambda m: subs_dict[m.group(0)], text)
...
>>> substitutions("The INTREPID explorer")
'The INTREPID explorer'
>>> substitutions("The INT.EPID explorer")
'The InternetEPID explorer'