0

例如,如果

s = "111111111111234"
or
s = "1111234"
or
s = "jsdfjkdsnfkjds111jknsdjkfsd"
or
s = "111as1as11"

我想将任何连续的 1 块减少为单个 1。

1234
1234
jsdfjkdsnfkjds1jknsdjkfsd
1as1as1
4

4 回答 4

3

您可以使用re.sub

import re
s = '111111111111234'
print re.sub('1+', '1', s)
# '1234'

解释:

  • '1+'-+匹配前一个正则表达式的一个或多个重复(在这种情况下1
  • '1'- 告诉re.sub用什么替换它。
  • s- 要执行re.subon 的字符串。
于 2013-01-26T03:59:13.337 回答
1
import re
re.sub('(.)\\1+', "\\1", "1111122233334444")
#=> "1234"
于 2013-01-26T04:01:29.613 回答
0

使用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'
于 2013-01-26T03:58:00.740 回答
0

您可以使用set删除重复项,然后join得到结果列表:

>>> ''.join(set('11111234'))
'1324'
于 2013-01-26T04:00:11.013 回答