我有一个with语字典及其含义,我想替换文本中的所有the语。
我发现部分有效的解决方案https://stackoverflow.com/a/2400577
目前,我的代码如下:
import re
myText = 'brb some sample text I lov u. I need some $$ for 2mw.'
dictionary = {
'brb': 'be right back',
'lov u': 'love you',
'$$': 'money',
'2mw': 'tomorrow'
}
pattern = re.compile(r'\b(' + '|'.join(re.escape(key) for key in dictionary.keys()) + r')\b')
result = pattern.sub(lambda x: dictionary[x.group()], myText)
print(result)
输出:
be right back some sample text I love you. I need some $$ for tomorrow.
如您所见,唱歌$$并没有改变,我知道这是由于\b
语法引起的。如何更改正则表达式以实现目标?
答案 0 :(得分:1)
用环视替换单词边界,以检查搜索短语周围是否有任何字符字符
pattern = re.compile(r'(?<!\w)(' + '|'.join(re.escape(key) for key in dictionary.keys()) + r')(?!\w)')
请参见Python demo
如果当前位置的左侧紧接着有一个字符char,则(?<!\w)
否定的后向匹配失败,如果右侧的单词中有一个字符char,则(?!\w)
的否定的向前失败使匹配失败。当前位置。
如果只需要在空白字符和字符串的开头/结尾之间匹配搜索词组,则用(?<!\w)
替换(?<!\S)
,用(?!\w)
替换(?!\S)
。