我想找到一个更简单的解决方案来捕获字符串中所有连续重复的字符。我早些时候尝试了regex方法,但我甚至无法接近。
这就是我使用for循环获取连续重复字符的方法,但如果我可以使用一些内置或库函数在更少的行中解决它,那会更好。
strin="aaabbcccccddd"
prevChar=strin[0]
contin=[]
currSt=""
for i in strin:
if i==prevChar:
currSt=currSt+i
else:
contin.append(currSt)
prevChar=i
currSt=""
currSt+=prevChar
if currSt:
contin.append(currSt)
print contin
O/p:['aaa', 'bb', 'ccccc', 'ddd']
我在用蟒蛇-2.7。感谢您的帮助。
更新:
我会在机器学习算法中添加这一功能,在该算法中,语料库可能很大。因此,一个消耗较少时间的有效解决方案将是优选的。此外,我想要重复的角色,而不是单身汉。
我假设您只想要重复的字符,而不是singleton。
此正则表达式将匹配后面至少跟有以下字符之一的任何字符相同的字符:
re.findall(r'((.)2+)', strin)
然而,输出看起来是这样的:
[('aaa', 'a'), ('bb', 'b'), ('ccccc', 'c'), ('ddd', 'd')]
所以我们需要把它清理干净。完整解决方案:
[t[0] for t in re.findall(r'((.)2+)', strin)]
输出:
['aaa', 'bb', 'ccccc', 'ddd']
你可以这样尝试,
>>> strin="aaabbcccccddd"
>>> set([item * list(strin).count(item) for item in list(strin)])
set(['ccccc', 'aaa', 'bb', 'ddd'])
排序的list
结果,
>>> sorted(set([item * list(strin).count(item) for item in list(strin)]))
['aaa', 'bb', 'ccccc', 'ddd']