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

标签 regex python-3.x dictionary

我有一本俚语词典及其含义,我想替换我文本中的所有俚语。

我找到了部分可行的解决方案 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/

相关文章:

python-3.x - 在 Tkinter 的 MCV 设计模式中,控制窗口属性的函数应该放在哪里?

html - 如何从shell脚本中的html表中提取数据?

java - 使用 find() 方法第一个实例不匹配

python - 将 Perl 中的多维哈希转换为 Python 字典

java - 如何对 Collectors.counting() 的结果进行算术运算?

python - 使用标准库/模块在Python中从矩阵(csv)创建字典或列表

javascript - 如何提高字典的性能?

javascript - 如何将 CJK 文本拆分为单词?

Java - 用系统路径分隔符替换路径分隔符的所有实例

python - 理解@property 装饰器和继承