我需要确定字符串是否由某个重复字符组成,例如eeeee
,55555
或!!!
。
我知道此正则表达式'e{1,15}'
可以与eeeee
匹配,但显然无法与555
匹配。我尝试[a-z0-9]{1-15}
,但它甚至匹配我不需要的字符串,例如Hello
。
解决方案不一定是正则表达式。我想不出有任何其他方法可以做到这一点。
答案 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
,这可能是一种更好的方法。