删除带有重复字符的字符串[Python]

时间:2017-09-12 09:14:22

标签: python regex

我需要确定字符串是否由某个重复字符组成,例如eeeee55555!!!

我知道此正则表达式'e{1,15}'可以与eeeee匹配,但显然无法与555匹配。我尝试[a-z0-9]{1-15},但它甚至匹配我不需要的字符串,例如Hello

解决方案不一定是正则表达式。我想不出有任何其他方法可以做到这一点。

3 个答案:

答案 0 :(得分:5)

当且仅当其中的所有字符相同时,字符串由单个重复字符组成。您可以通过构造字符串集set('55555')来轻松地测试它。

当且仅当集合的大小为1时,所有字符都相同:

>>> len(set('55555')) == 1
True
>>> len(set('Hello')) == 1
False
>>> len(set('')) == 1
False

如果你想允许空字符串(设置大小为0),那么使用<= 1代替== 1

答案 1 :(得分:1)

正则表达式解决方案(通过re.search()函数):

import re

s = 'eeeee'
print(bool(re.search(r'^(.)\1+$', s)))   # True

s = 'ee44e'
print(bool(re.search(r'^(.)\1+$', s)))   # False

^(.)\1+$

  • (.) - 捕捉任何角色

  • \1+ - 对之前捕获的群组进行反向引用,重复一次或多次

答案 2 :(得分:0)

您不必为此使用正则表达式,测试以确定字符串中的所有字符是否相同将产生所需的输出:

s = "eee"
assert len(s) > 0
reference = s[0]
result = all([c==reference for c in s])

或者如托马斯所示使用set,这可能是一种更好的方法。