如何将一系列相同的字符合并为一个?

TIM*_*MEX 7 python regex string

假设我有这个:

我---太阳 - 是------甚大---.

我想用一个连字符替换所有多个连字符.

unu*_*tbu 16

import re

astr='My---sun--is------very-big---.'

print(re.sub('-+','-',astr))
# My-sun-is-very-big-.
Run Code Online (Sandbox Code Playgroud)


Tim*_*ker 13

如果要替换任何连续字符的运行,可以使用

>>> import re
>>> a = "AA---BC++++DDDD-EE$$$$FF"
>>> print(re.sub(r"(.)\1+",r"\1",a))
A-BC+D-E$F
Run Code Online (Sandbox Code Playgroud)

如果您只想合并非单词字符,请使用

>>> print(re.sub(r"(\W)\1+",r"\1",a))
AA-BC+DDDD-EE$FF
Run Code Online (Sandbox Code Playgroud)

如果它只是连字符,我推荐unutbu的解决方案.


Fog*_*ird 5

如果您真的只想合并连字符,请使用其他建议.否则你可以编写自己的函数,如下所示:

>>> 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'
Run Code Online (Sandbox Code Playgroud)


Wil*_*hen 5

像往常一样,有一个很好的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'
Run Code Online (Sandbox Code Playgroud)

  • @McPeterson:当然,但他们并不那么好.对于只处理连字符,你可以做'''.join(key = key if ==' - 'else''.join(group)for key,group in groupby(s))`.对于处理任何非字母数字字符,`''.join(''.join(group)if key.isalnum()else key for key,group in groupby(s))`.但我只是使用其中一个正则表达式解决方案. (2认同)