2016-09-13 4 views
0

Когда у меня есть определенный символ, который повторяется несколько раз в последовательности, я хочу объединить его, чтобы не было одинаковых смежных символов.Python - слияние повторяющихся символов (в последовательности) в строке?

Например:

s = 'aa.bc.a.d.aaa.z' 
# after merging repeating "a" character in a sequence: 

Выход должен быть: a.bc.a.d.a.z

P.S. Я смог найти начальные и конечные индексы таких совпадений (с регулярным выражением), но до сих пор не может видеть обычный способ просто слить те, что мне нужны.

Просто чтобы прояснить, как я нашел его:

import re 
f = re.finditer('(a){2,}', s) 
for match in f: 
    match.span() 
(0, 2) 
(10, 13) 

ответ

0

Вы можете использовать itertools.groupby:

s = ''.join(ch for ch, _ in itertools.groupby('aa.bc.a.d.aaa.z')) 
+0

Это интересно – Andrius

0

Try:

>>> re.sub(r'(\D)\1+', r'\1', s) 
'a.bc.a.d.a.z' 
+1

Почему не цифра ('\ D')? Похоже, что OP должен соответствовать любому персонажу. –

+0

Это тривиальная замена –

0

Как об этом:

string = 'aa.bc.a.d.aaa.z' 
res = "" 
for c in string: 
    if not res.endswith(c): 
    res += c 
Смежные вопросы