Python正则表达式-用标点符号快速替换多个关键字,并以

Python正则表达式-用标点符号快速替换多个关键字,并以,python,regex,string,replace,full-text-search,Python,Regex,String,Replace,Full Text Search,这是这个的延伸 我有一本python字典,是这样做的 a = {"animal": [ "dog", "cat", "dog and cat"], "XXX": ["I've been", "asp*", ":)"]} 我想找到一个解决方案,用它们的键尽可能快地替换字典值中的所有单词。解决方案对于大文本应该是可伸缩的。如果单词以星号结尾

这是这个的延伸

我有一本python字典,是这样做的

a = {"animal": [ "dog", "cat", "dog and cat"], "XXX": ["I've been", "asp*", ":)"]}
我想找到一个解决方案,用它们的键尽可能快地替换字典值中的所有单词。解决方案对于大文本应该是可伸缩的。如果单词以星号结尾,则意味着文本中以该前缀开头的所有单词都应替换

所以下面这句话“我一直很坏,但我渴望成为一个更好的人,像我的狗和猫一样:)”应该转化为“XXX坏,但我XXX做一个更好的人,像我的动物XXX

我正在尝试使用它,认为它应该是最快的选择。它是?但是我不能成功。 此外,我发现问题:

  • 在处理包含标点符号的单词时(如“:”和“我曾经”)
  • 当一些字符串像“狗”和“狗和猫”一样重复时
您能用可扩展的解决方案帮助我实现目标吗?

您可以调整以满足您的需要:

  • a
    创建另一个字典,该字典将包含相同的键和根据值创建的正则表达式
  • 如果找到
    *
    字符,如果您指的是零个或多个单词字符,请将其替换为
    \w*
    ,如果您指的是零个或多个非空白字符,请使用
    \S*
    (请调整
    def quote(self,char)
    方法),否则,请引用字符
  • 使用明确的单词边界,
    (?和
    (?!\w)
    ,或者如果它们干扰匹配的非单词条目,则将它们全部删除
  • 这里的第一个正则表达式看起来像
    (?()),第二个看起来像
    (?)?