たとえば、
s = "111111111111234"
or
s = "1111234"
or
s = "jsdfjkdsnfkjds111jknsdjkfsd"
or
s = "111as1as11"
連続する 1 のチャンクを 1 つの 1 に減らしたい。
1234
1234
jsdfjkdsnfkjds1jknsdjkfsd
1as1as1
使用できますre.sub
import re
s = '111111111111234'
print re.sub('1+', '1', s)
# '1234'
説明:
'1+'
- は+
、前の正規表現の 1 回以上の繰り返しに一致します (この場合は1
)'1'
re.sub
-何に置き換えるかを指示します。s
- 実行する文字列re.sub
。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'