替换列表元素中的空格

时间:2010-10-23 14:03:27

标签: python regex string replace whitespace

我有一个标签列表:

>>> tags_list
['tag1', 'second tag', 'third longer tag']

如何用“+”替换列表中每个元素中的空格?我试图用正则表达式做这个,但每个字符串保持不变:

for tag in tags_list:
    re.sub("\s+" , " ", tag)

我的做法出了什么问题?

编辑:

是的,我忘了提及,在每个标签中的单词之间我们可以有多个空格以及标签可以以空格开头或结尾,因为它们是用逗号分隔的字符串解析的,带有split(“,”): (“第一个标签,第二个标签,第三个标签”)。抱歉没有足够精确。

3 个答案:

答案 0 :(得分:6)

re.sub()返回一个新字符串,它不会就地修改其参数。

你可能想要:

tags_list = [re.sub(r"\s+", "+", tag) for tag in tags_list]

另外,不要忘记正则表达式之前的r,否则你必须将所有反斜杠加倍(即你发布的正则表达式不起作用)。

编辑:我认为replace whitespaces within each element of the list with "+"表示将所有连续的空格折叠为单个+字符。如果不是,请使用r"\s"代替r"\s+"

答案 1 :(得分:2)

你所做的不是用+替换空格,而是用一个空格替换多个空格字符,最重要的是你将结果抛出。这就是你需要的:

>>> tags = ['tag1', 'second tag', 'third longer tag']
>>> [re.sub(r'\s+', '+', i.strip()) for i in tags]
['tag1', 'second+tag', 'third+longer+tag']
>>> tags
['tag1', 'second tag', 'third longer tag']

答案 2 :(得分:0)

>>> tags = ['tag1', 'second tag', 'third longer tag']
>>> [ '+'.join(i.split()) for i in tags ]
['tag1', 'second+tag', 'third+longer+tag']