假设我有这个字符串:
我的---太阳--非常大---。
我想用一个连字符替换所有的多个连字符。
我的---太阳--非常大---。
我想用一个连字符替换所有的多个连字符。
import re
astr='My---sun--is------very-big---.'
print(re.sub('-+','-',astr))
# My-sun-is-very-big-.
-{2,}
可以避免不必要地替换单个 -
。 - Tim Pietzcker如果你想要替换任意连续的字符序列,你可以使用
>>> 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的解决方案。
如果您只想合并连字符,请使用其他建议。否则,您可以编写自己的函数,类似于以下内容:
>>> 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'
通常情况下,使用 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'
''.join(key if key == '-' else ''.join(group) for key, group in groupby(s))
。对于处理任何非字母数字字符,''.join(''.join(group) if key.isalnum() else key for key, group in groupby(s))
。但我会使用正则表达式解决方案之一。 - Will McCutchen>>> import re
>>> re.sub("-+", "-", "My---sun--is------very-big---.")
'My-sun-is-very-big-.'
"-+"
将查找1个或多个"-"
。如果不使用 re 模块,是否有其他可行的替代方案:
'-'.join(filter(lambda w: len(w) > 0, 'My---sun--is------very-big---.'.split("-")))
或者采用Tim和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---")
另一个简单的解决方案是使用字符串对象的替换函数。
while '--' in astr:
astr = astr.replace('--','-')
如果你不想使用正则表达式:
my_string = my_string.split('-')
my_string = filter(None, my_string)
my_string = '-'.join(my_string)
我有
my_str = 'a, b,,,,, c, , , d'
我想要
'a,b,c,d'
压缩所有空格("replace" 部分),然后在逗号处拆分,如果不是 None,则用逗号连接:
my_str_2 = ','.join([i for i in my_str.replace(" ", "").split(',') if i])