正则表达式删除重复的字符和组合

我有一个字符串,其中包含在其末尾具有重复字符的单词。这些字符可能是这样的组合:

  • 单词xxxx

  • 字xyxyxy

  • wordxyzxyzxyz

例如:

string = "Thisssssssss isisis echooooooo stringggg。替换符号 sss 的重复组 sss"

我找到了一种方法来替换一些重复的组合,这样:

re.sub(r'([a-z]{1,3})\1+', r'\1', string)

我得到这些结果:

这是 echooo stringg。替换重复的符号组

我应该如何更改正则表达式以删除所有重复的字符及其组合?


MYYA
浏览 166回答 2
2回答

有只小跳蛙

您的正则表达式几乎是正确的。您需要添加?到捕获组中,以便它尽可能少地匹配(“惰性匹配”而不是尽可能多地匹配的默认“贪婪”行为)。我还使用了+instead of{1,3}因为限制重复似乎是3任意的。您可以观察两种行为之间的区别:贪婪与懒惰。注意:贪婪的行为被视为aaaa而aa * 2不是a * 4贪心行为仅适用于偶数长度的重复。aaaaa被视为aa * 2 + a因此替换结果将是aaa而不是a。for word in "Thisssssssss isisisis echooooooo stringggg. Replaceaceaceace repeatedededed groupssss of symbolssss".split():    print(re.sub(r'([a-z]+?)\1+', r'\1', word))产出Thisisechostring.Replacerepeatedgroupsofsymbols

qq_花开花谢_0

一个班轮解决方案string = "Thisssssssss isisisis echooooooo stringggg. Replaceaceaceace repeatedededed groupssss of symbolssss"print(re.sub(r'([a-z]+?)\1+', r'\1', string))#This is echo string. Replace repeated groups of symbols
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python