假设我有一个字符串,例如
'I hate *some* kinds of duplicate. This string has a duplicate phrase, duplicate phrase.'
我想删除duplicate phrase
的第二次出现,而又不删除其组成部分的其他出现,例如duplicate
的其他用法。
此外,我需要删除所有 潜在重复短语,而不仅仅是我事先知道的某些特定短语的重复短语。
我发现了几篇关于类似问题的文章,但没有一篇能帮助我解决我的特殊问题:
我曾希望从那里的最后一个链接(re.sub(r'\b(.+)(\s+\1\b)+', r'\1', s)
)中修改该方法,但我不知道该怎么做。
如何从Python字符串中删除两个或多个单词的所有重复重复短语?
答案 0 :(得分:-1)
感谢大家的尝试和评论。我终于找到了解决方案:
s = 'I hate *some* kinds of duplicate. This string has a duplicate phrase, duplicate phrase.'
re.sub(r'((\b\w+\b.{1,2}\w+\b)+).+\1', r'\1', s, flags = re.I)
# 'I hate *some* kinds of duplicate. This string has a duplicate phrase.'
正则表达式
r'((\b\w+\b.{1,2}\w+\b)+).+\1'
查找每次出现的由字母数字字符组成的多个字符行的情况,这些字符由一个或两个[任何字符]分隔(以覆盖单词不仅由空格分隔,还可以由句号或逗号和空格分隔的情况),然后重复跟随一些不确定长度的[任意字符]。然后
re.sub(r'((\b\w+\b.{1,2}\w+\b)+).+\1', r'\1', s, flags = re.I)
用字母数字字符的第一个多行字母(由一个或两个[任何字符]分隔)替换这种情况,请务必忽略大小写(因为重复的短语有时可能出现在句子的开头)。