2017-09-12 51 views
1

我需要确定一个字符串是否由某个重复字符组成,例如eeeee,55555!!!删除带重复字符的字符串[Python]

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

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

+2

的可能的复制(https://stackoverflow.com/questions/1660694/regular-expression-to-match-any个字符数感-重复-更比10倍)。你可以很容易地调整正确的正则表达式来满足你的需求。 –

回答

5

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

所有的人物都是相同的,当且仅当一组大小为1:

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

如果你想允许空字符串,以及(组大小为0),然后使用<= 1代替== 1

0

您不必使用正则表达式这一点,测试,以确定是否字符串中的所有字符都同样会产生所需的输出:

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

或者使用set托马斯表明,这可能是一个更好的方法。

1

Regex的溶液(通过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+ - 反向引用先前捕获的基团,重复一次或多次

[被重复的正则表达式匹配的任何字符的10倍以上]