我需要确定一个字符串是否由某个重复字符组成,例如eeeee
,55555
或!!!
。删除带重复字符的字符串[Python]
我知道这个正则表达式'e{1,15}'
可以匹配eeeee
但它显然不能匹配555
。我试过[a-z0-9]{1-15}
,但它甚至匹配我不需要的字符串,如Hello
。
该解决方案不一定是正则表达式。我无法想出任何其他方式来做到这一点。
我需要确定一个字符串是否由某个重复字符组成,例如eeeee
,55555
或!!!
。删除带重复字符的字符串[Python]
我知道这个正则表达式'e{1,15}'
可以匹配eeeee
但它显然不能匹配555
。我试过[a-z0-9]{1-15}
,但它甚至匹配我不需要的字符串,如Hello
。
该解决方案不一定是正则表达式。我无法想出任何其他方式来做到这一点。
一个字符串由单个重复字符组成,当且仅当其中的所有字符相同。您可以通过从字符串中构建一组来轻松测试:set('55555')
。
所有的人物都是相同的,当且仅当一组大小为1:
>>> len(set('55555')) == 1
True
>>> len(set('Hello')) == 1
False
>>> len(set('')) == 1
False
如果你想允许空字符串,以及(组大小为0),然后使用<= 1
代替== 1
。
您不必使用正则表达式这一点,测试,以确定是否字符串中的所有字符都同样会产生所需的输出:
s = "eee"
assert len(s) > 0
reference = s[0]
result = all([c==reference for c in s])
或者使用set
托马斯表明,这可能是一个更好的方法。
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+
- 反向引用先前捕获的基团,重复一次或多次
的可能的复制(https://stackoverflow.com/questions/1660694/regular-expression-to-match-any个字符数感-重复-更比10倍)。你可以很容易地调整正确的正则表达式来满足你的需求。 –