Предположим, у меня есть это:
My --- ВС - это ------ очень-большой ---
Я хочу заменить все несколько дефисов одним дефисом.
import re astr='My---sun--is------very-big---.' print(re.sub('-+','-',astr)) # My-sun-is-very-big-.
Если вы хотите заменить любой ряд последовательных символов, вы можете использовать
>>> import re >>> a = "AA---BC++++DDDD-EE$$$$FF" >>> print(re.sub(r"(.)\1+",r"\1",a)) A-BC+D-E$F
Если вы хотите объединить не-словесные символы, используйте
>>> print(re.sub(r"(\W)\1+",r"\1",a)) AA-BC+DDDD-EE$FF
Если это действительно дефисы, я рекомендую решение unutbu.
Как обычно, есть хорошее решение itertools, использующее groupby:
itertools
groupby
>>> from itertools import groupby >>> s = 'aaaaa----bbb-----cccc----d-d-d' >>> ''.join(key for key, group in groupby(s)) 'a-b-c-d-d-d'
Если вы действительно хотите объединить дефисы, используйте другие предложения. В противном случае вы можете написать свою собственную функцию, что-то вроде этого:
>>> def coalesce(x): ... n = [] ... for c in x: ... if not n or c != n[-1]: ... n.append(c) ... return ''.join(n) ... >>> coalesce('My---sun--is------very-big---.') 'My-sun-is-very-big-.' >>> coalesce('aaabbbccc') 'abc'
Как насчет:
>>> import re >>> re.sub("-+", "-", "My---sun--is------very-big---.") 'My-sun-is-very-big-.'
регулярное выражение "-+" будет искать 1 или более "-".
"-+"
"-"
Как насчет альтернативы без повторного модуля:
'-'.join(filter(lambda w: len(w) > 0, 'My---sun--is------very-big---.'.split("-")))
Или, следуя предыдущему предложению Тима и FogleBird, вот более общий метод:
def coalesce_factory(x): return lambda sent: x.join(filter(lambda w: len(w) > 0, sent.split(x))) hyphen_coalesce = coalesce_factory("-") hyphen_coalesce('My---sun--is------very-big---.')
Хотя лично я бы сначала использовал модуль re:)
re.sub('-+', '-', "My---sun--is------very-big---")
у меня
my_str = 'a, b,,,,, c, , , d'
хочу
'a,b,c,d'
сжимает все пробелы (бит "замена"), затем разделяет запятую, а затем, если нет, соединяет запятую между:
my_str_2 = ','.join([i for i in my_str.replace(" ", "").split(',') if i])
, если вы не хотите использовать регулярные выражения:
my_string = my_string.split('-') my_string = filter(None, my_string) my_string = '-'.join(my_string)
Другим простым решением является функция замены объекта String.
while '--' in astr: astr = astr.replace('--','-')