当前位置: 首页 > 面试题库 >

使用正则表达式删除重复的字符?

长孙兴德
2023-03-14
问题内容

假设我想使用正则表达式删除字符串中的所有重复字符(特定字符)。这很简单-

import re
re.sub("a*", "a", "aaaa") # gives 'a'

如果我想用相应的字符替换所有重复的字符(即a,z)怎么办?我该怎么做呢?

import re
re.sub('[a-z]*', <what_to_put_here>, 'aabb') # should give 'ab'
re.sub('[a-z]*', <what_to_put_here>, 'abbccddeeffgg') # should give 'abcdefg'

注意: 我知道可以使用哈希表或某些O(n ^ 2)算法更好地解决这种删除重复项的方法,但是我想使用正则表达式进行探索


问题答案:
>>> import re
>>> re.sub(r'([a-z])\1+', r'\1', 'ffffffbbbbbbbqqq')
'fbq'

()周围的[a-z]指定 捕获组 ,然后将\1(一个 反向引用 在图案和替换两者)指的是第一个捕获组的内容。

因此,正则表达式显示为“查找字母,然后出现一个或多个相同字母”,然后将整个找到的部分替换为单个出现的找到的字母。

旁注…

您的示例代码a实际上是错误的:

>>> re.sub('a*', 'a', 'aaabbbccc')
'abababacacaca'

您确实希望使用'a+'regex而不是'a*',因为*运算符匹配出现的“
0个或多个”,因此将匹配两个非a字符之间的空字符串,而+运算符匹配的是“ 1个或多个”。



 类似资料:
  • 问题内容: 有没有办法使用正则表达式来匹配重复的字符集?例如: 我知道那是错的。但是有什么可以匹配这种效果的吗? 更新: 您可以使用嵌套捕获组吗?像什么? 问题答案: 将要重复的正则表达式放在括号中。例如,如果您要重复5次: 或者,如果您想要任意数量的重复(0或更多): 或一个或多个重复: 编辑 以回应更新 正则表达式中的括号有两个作用:它们将正则表达式中的一系列项目组合在一起,以便您可以将运算符

  • 问题内容: 我有这样一行: 我希望它看起来像这样: 我不能只对“,”进行替换,因为它将删除括号之外的那些实例。 我尝试了这个: 它会替换括号内的 所有内容 (而不仅仅是逗号)。我尝试将逗号和空格组合仅添加到该正则表达式中,但那时似乎并没有删除任何内容。 有人可以告诉我如何指定仅 在括号内出现时删除(逗号空间)吗? __ 问题答案: 使用前瞻: 此正则表达式说“代替逗号空间只有在下一括号字符是一个

  • 本文向大家介绍JS使用正则表达式除去字符串中重复字符的方法,包括了JS使用正则表达式除去字符串中重复字符的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JS使用正则表达式除去字符串中重复字符的方法。分享给大家供大家参考,具体如下: 这里演示一个简单的JavaScript正则表达式实例,将一串含有重复字符串中的多余字符滤除掉,请运行查看效果。 具体代码如下: 运行结果如下: Googl

  • 我想生成具有此表单的随机字符串 [A-Za-z0-9]{5,10} 我不知道怎么做,我应该用正则表达式还是随机函数?

  • 如何在不包含连续子字符串baa的字母表{a,b,c}上表达正则表达式?

  • 问题内容: 我正在尝试创建一个匹配字符串的正则表达式,如果它连续有3个或多个重复字符(例如aaaaaa,testtttttt,otttttter)。 我尝试了以下方法: 连续 匹配 任意 3个字符,但不 连续的 字符…我在哪里出错? 问题答案: 您要的内容无法使用 真正的 正则表达式完成,您需要的是(不规则的)反向引用。尽管许多正则表达式引擎实现了它们,但Go使用的RE2却没有。RE2是一种快速的