将任何字符串块替换为Python中的单个实例

时间:2013-01-26 03:56:10

标签: python string

例如,如果

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

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

1234
1234
jsdfjkdsnfkjds1jknsdjkfsd
1as1as1

4 个答案:

答案 0 :(得分:3)

您可以使用re.sub

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

说明:

  • '1+' - +匹配前一个正则表达式的一次或多次重复 (在这种情况下为1
  • '1' - 告诉re.sub用什么来替换它。
  • s - 执行re.sub的字符串。

答案 1 :(得分:1)

import re
re.sub('(.)\\1+', "\\1", "1111122233334444")
#=> "1234"

答案 2 :(得分: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'

答案 3 :(得分:0)

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

>>> ''.join(set('11111234'))
'1324'