例如,如果
s = "111111111111234"
or
s = "1111234"
or
s = "jsdfjkdsnfkjds111jknsdjkfsd"
or
s = "111as1as11"
我想将任何连续的 1 块减少为单个 1。
1234
1234
jsdfjkdsnfkjds1jknsdjkfsd
1as1as1
您可以使用re.sub
import re
s = '111111111111234'
print re.sub('1+', '1', s)
# '1234'
解释:
'1+'
-+
匹配前一个正则表达式的一个或多个重复(在这种情况下1
)'1'
- 告诉re.sub
用什么替换它。s
- 要执行re.sub
on 的字符串。import re
re.sub('(.)\\1+', "\\1", "1111122233334444")
#=> "1234"
使用itertools.groupby()
:
In [162]: from itertools import groupby
In [163]: strs="111111111111234"
In [164]: "".join(k if k=='1' else "".join(g) for k,g in groupby(strs))
Out[164]: '1234'
In [170]: strs="1111112222111111234"
In [171]: "".join(k if k=='1' else "".join(g) for k,g in groupby(strs))
Out[171]: '122221234'
或将所有重复的项目减少为单个项目:
In [175]: strs="1111112222111111234"
In [176]: "".join(k for k,g in groupby(strs))
Out[176]: '121234'
您可以使用set
删除重复项,然后join
得到结果列表:
>>> ''.join(set('11111234'))
'1324'