使用字典替换字符串-正则表达式

时间:2018-06-29 12:50:17

标签: regex python-3.x dictionary

我有一个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语法引起的。如何更改正则表达式以实现目标?

1 个答案:

答案 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)