【问题标题】:Replacing whitespaces within list elements替换列表元素中的空格
【发布时间】:2010-10-23 14:03:26
【问题描述】:

我有一个标签列表:

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

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

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

我的方法有什么问题?

编辑:

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

【问题讨论】:

    标签: python regex string replace whitespace


    【解决方案1】:

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

    你可能想要:

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

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

    编辑:我假设replace whitespaces within each element of the list with "+" 意味着将所有连续的空格折叠成一个+character。如果没有,请使用r"\s" 而不是r"\s+"

    【讨论】:

      【解决方案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']
      

      【讨论】:

      • 正如@Axidos 在对我已删除答案的评论中指出的那样,这不适用于连续的空格、制表符或换行符。
      • @Space:OP 显然错误地描述了他的实际任务。如果你看他的例子,他根本不处理连续的空格。
      【解决方案3】:
      >>> tags = ['tag1', 'second tag', 'third longer tag']
      >>> [ '+'.join(i.split()) for i in tags ]
      ['tag1', 'second+tag', 'third+longer+tag']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-29
        • 2019-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多