我有一本俚语词典及其含义,我想替换我文本中的所有俚语。
我找到了部分可行的解决方案 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
语法造成的。如何更改我的正则表达式以实现我的目标?
最佳答案
用检查搜索短语周围的任何单词字符的环视替换单词边界
pattern = re.compile(r'(?<!\w)(' + '|'.join(re.escape(key) for key in dictionary.keys()) + r')(?!\w)')
参见 Python demo
(?<!\w)
如果在当前位置和 (?!\w)
的左侧立即有一个单词 char,则负向后查找会导致匹配失败。如果当前位置右侧紧邻单词 char,则否定前瞻会导致匹配失败。
替换(?<!\w)
与 (?<!\S)
和 (?!\w)
与 (?!\S)
如果您只需要匹配空格字符和字符串开头/结尾之间的搜索短语。
关于regex - 使用字典替换字符串 - 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51102201/