代码之家  ›  专栏  ›  技术社区  ›  Adam Matan

在python中,如何将分隔符拆分为一个或多个分隔符?

  •  25
  • Adam Matan  · 技术社区  · 15 年前

    我有一个来自日志文件的格式化字符串,它看起来像:

    >>> a="test                            result"
    

    也就是说,测试和结果被一些空格分割-它可能是使用格式化字符串创建的,该字符串 test 一些固定的间距。

    简单的拆分不会起作用:

    >>> a.split(" ")
    ['test', '', '', '', ... '', '', '', '', '', '', '', '', '', '', '', 'result']
    

    split(DELIMITER, COUNT) 清除了一些不必要的值:

    >>> a.split(" ",1)
    ['test', '                           result']
    

    这是有帮助的-当然,我真的需要:

    ['test', 'result']
    

    我可以用 split() 然后 map + strip() 但我想知道是否有一种更为蟒蛇式的方式来做这件事。

    谢谢,

    亚当

    更新: 这么简单的解决方案!谢谢大家。

    6 回复  |  直到 6 年前
        1
  •  46
  •   Kimvais    15 年前

    只是不要给任何熟食店?

    >>> a="test                            result"
    >>> a.split()
    ['test', 'result']
    
        2
  •  29
  •   ghostdog74    15 年前
    >>> import re
    >>> a="test                            result"
    >>> re.split(" +",a)
    ['test', 'result']
    
    >>> a.split()
    ['test', 'result']
    
        3
  •  18
  •   Mark Byers    15 年前

    这就应该奏效:

    a.split()
    

    例子:

    >>> 'a      b'.split(' ')
    ['a', '', '', '', '', '', 'b']
    >>> 'a      b'.split()
    ['a', 'b']
    

    来自 documentation :

    如果未指定sep或sep为none,则应用不同的拆分算法:连续空格的运行被视为单个分隔符,如果字符串具有前导或尾随空格,则结果在开始或结束时将不包含空字符串。因此,拆分空字符串或仅由带无分隔符的空格组成的字符串将返回[]。

        4
  •  4
  •   YOU    15 年前

    有什么简单的问题吗 a.split() ?

        5
  •  1
  •   theferrit32    6 年前

    如果要拆分为一个或多个分隔符,而不希望仅依赖于默认值 split() 如果没有与用例匹配的参数,则可以使用regex来匹配分隔符。以下将使用一个或多个 . 作为分隔符:

    s = 'a.b....c......d.ef...g'
    sp = re.compile('\.+').split(s)
    print(sp)
    

    它给出:

    ['a', 'b', 'c', 'd', 'ef', 'g']
    
        6
  •  0
  •   anshu kumar    7 年前

    只需再添加一种方法,在分隔符与空格不同且s.split()不起作用的情况下更有用。

    如str=“python,is,,more,,,,,flexible”。

    In [27]: s = "Python is   more      flexible"
    
    In [28]: str_list = list(filter(lambda x: len(x) > 0, s.split(" ")))
    
    In [29]: str_list
    Out[29]: ['Python', 'is', 'more', 'flexible']