我正在尝试从字符串中删除重复的单词/短语。
例如,如果我有下面的字符串
“normalement ononon va,on vadiviser,génériquegénériquegénérique l'explication,générique l'explicationdetaille,detaille”
我想删除重复的短语“on va”之后,和“générique l 'explication”之后,在上面的字符串中,也重复连续的单个单词“on”和“générique”。尝试了下面两种方法,但似乎它是工作时,它将没有任何标点符号的单个单词
>>> import re
>>> s = "normalement on on on va, on va diviser, générique générique l'explication, générique l'explication détaille, détaille"
>>> re.sub(r'\b(.+)(\s+\1\b)+', r'\1', s)
"normalement on va, on va diviser, générique l'explication, générique l'explication détaille, détaille"
>>> sen="normalement on on on va, on va diviser, générique générique l'explication, générique l'explication détaille, détaille"
>>> re.sub(r"\b([a-zA-z àâäèéêëîïôœùûüÿçÀÂÄÈÉÊËÎÏÔŒÙÛÜŸÇ']+\s *)\1{1,}", '\\1', sen, flags=re.IGNORECASE)
"normalement on va, on va diviser, générique l'explication, générique l'explication détaille, détaille"
有没有人可以帮助我在这方面和建议,我如何可以删除相邻的重复单词/短语出现标点符号和没有标点符号。
2条答案
按热度按时间e3bfsja21#
re.sub(r"\b(\w+(\s\w+)?)\b(?:.*?)(\b\1\b)", "\\1", sen, flags=re.IGNORECASE)
这应该是你想要的。和你分享的那个字符串匹配。
更新:
(@Markalex的有益评论之后。)
前面的正则表达式将捕获任何重复项,即使它们与被检查的字符串完全相反。这是一个更新的版本。
说明:
o4hqfura2#
您可以使用以下模式,并使用 re.finditer 函数。
随后,您需要检查匹配是否包含逗号,其中您需要使用单独的 str.replace 语句。
我想不出一种方法来捕捉逗号。
输出量