回答
import re
astr='My---sun--is------very-big---.'
print(re.sub('-+','-',astr))
# My-sun-is-very-big-.
+1,但' - {2,}'将避免不必要地替换单个'-'。 – 2010-05-12 08:37:51
re.sub('-+', '-', "My---sun--is------very-big---")
如何:
>>> import re
>>> re.sub("-+", "-", "My---sun--is------very-big---.")
'My-sun-is-very-big-.'
正则表达式"-+"
将寻找1个或多个"-"
。
如果你真的只想合并连字符,请使用其他建议。否则,你可以编写自己的功能,这样的事情:
>>> 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'
+1为一般解决方案。由于OP在他们的例子中使用了英语单词,因此指定一组要合并(或不合并)的字符可能会更好,以避免使用双字母(即字母 - >字母)混淆单词。 – tgray 2010-05-11 20:00:51
针对通用解决方案的+1达成一致 – mcpeterson 2010-05-11 21:43:09
像往常一样,有一个很好的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'
如果您只想重复使用连字符,此解决方案不会回答问题。有没有一个itertools解决方案可以保持'aaaaa'? – mcpeterson 2010-05-11 22:18:06
@McPeterson:当然,但他们不太好。为了处理连字符,你可以做'''。加入(key如果key ==' - 'else''.join(group)for key,groupby groupby(s))'。为了处理任何非字母数字字符,'''.join(''。join(group)if key.isalnum()else key for group,groupby(s))''。但我只是使用其中一个正则表达式解决方案。 – 2010-05-11 22:48:50
如果您要更换的连续字符任何运行,你可以使用
>>> 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的解决方案。
如何不重模块的替换:
'-'.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---.')
虽然就个人而言,我会用重模块首先:)
- mcpeterson
另一个简单的解决方案是String对象的替换函数。
while '--' in astr:
astr = astr.replace('--','-')
,如果你不想使用正则表达式:
my_string = my_string.split('-')
my_string = filter(None, my_string)
my_string = '-'.join(my_string)
- 1. 如何将两列合并为一个
- 2. 将两个日常系列合并为一个小时系列
- 3. 将字符串合并为一个
- 4. 如何将多行中相同字段的值合并为一对多选择中的一个字符串?
- 5. 如何合并一个字典的列表为一个字典
- 6. 如何将两个字符串的cssText合并为一个?
- 7. Python:如何将一个集合中的条目合并为一个字符串?
- 8. 将合并列表合并为一个
- 9. 将一系列的.MAT文件合并为一个CSV文件
- 10. 如何找到一个列表列,并在其他行相同的值连接字符串为同一列值
- 11. 如何将2个javascript变量合并为一个字符串
- 12. 如何在一系列相同的字符串之间刮擦?
- 13. Python 2.7.12:如何将两个列表合并为一个字典
- 14. 合并两个表为一个具有相同的列名
- 15. 将3个字节阵列合并为一个单一的c#
- 16. 将两个几乎相同的UNIONed查询合并为一个
- 17. 将两个相同的javascript合并为一个
- 18. 将多个相同的SQLite查询合并为一个
- 19. 蟒蛇 - 如何合并字符串列表,成为一个
- 20. git - 将一系列提交合并为一个提交
- 21. 在clojure中将一系列向量合并为一个
- 22. 如何将两行(由字符组成)合并为一个
- 23. 如何将列表的列表合并为一个列表?
- 24. 将一个比特合并为一个字符串
- 25. 如何将相同长度的列表组合成一个?
- 26. 如何将数字合并为一组
- 27. 将相同的Oracle SQL脚本合并为一个?
- 28. 将多个列合并为一个
- 29. 将几个sql列合并为一个
- 30. 将四个ID列合并为一个
你真的要合并只是连字符,或重复字符的任意运行? – 2010-05-11 19:35:51