如何在Python中删除重复的短语?

时间:2018-11-06 23:48:55

标签: python regex python-2.7 replace

假设我有一个字符串,例如

'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字符串中删除两个或多个单词的所有重复重复短语?

1 个答案:

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

用字母数字字符的第一个多行字母(由一个或两个[任何字符]分隔)替换这种情况,请务必忽略大小写(因为重复的短语有时可能出现在句子的开头)。