【问题标题】:Python - Split string of numeric values with unknown delimitersPython - 使用未知分隔符拆分数值字符串
【发布时间】:2015-05-26 03:00:46
【问题描述】:

我需要从格式不正确的字符串中解析数值。示例:

"0    0    .1        .05       .05       0.        0.         .01"

"0,0,.1,.05,.05,0.,0.,.01"

如您所见,分隔符可以从几个空格到没有空格的逗号不等。此外,数字可能是整数或浮点数。我想拆分任意数量的连续空格、制表符和逗号。我以为我可以使用 str.split() 函数来做到这一点,但我发现它只适用于一个分隔符参数,默认情况下不会使用逗号。

有没有人知道一个聪明的方法来做到这一点?可能是正则表达式?

提前致谢。

【问题讨论】:

    标签: python regex string split


    【解决方案1】:

    正则表达式可以,但你也可以用空格替换每个逗号,然后使用正则split

    s.replace(',', ' ').split()
    

    演示:

    >>> s = "0    0    .1        .05       .05       0.        0.         .01"
    >>> s.replace(',', ' ').split()
    ['0', '0', '.1', '.05', '.05', '0.', '0.', '.01']
    
    >>> s = "0,0,.1,.05,.05,0.,0.,.01"
    >>> s.replace(',', ' ').split()
    ['0', '0', '.1', '.05', '.05', '0.', '0.', '.01']
    

    【讨论】:

    • 感谢您在正则表达式框之外思考 (+1)。
    【解决方案2】:

    我想拆分任意数量的连续空格、制表符和逗号。

    您可以使用re.split() 通过正则表达式进行拆分。

    >>> import re
    >>> s = '0    0    .1        .05       .05       0.        0.         .01'
    >>> re.split(r'[\s,]+', s)
    
    ['0', '0', '.1', '.05', '.05', '0.', '0.', '.01']
    

    注意:以上内容将根据空格和逗号进行相应拆分。如果要严格按照<space>、制表符和逗号进行拆分,可以将正则表达式更改为[ \t,]+ ...

    【讨论】:

      【解决方案3】:

      您可以使用re.split

      [ ,]+
      

      你可以这样分割。

      import re
      y="0,0,.1,.05,.05,0.,0.,.01"
      print re.split(r"[ ,]+",y)
      

      或者

      你可以简单地使用re.findall。这里你可以有任何分隔符。

      import re
      y="0,0,.1,.05,.05,0.,0.,.01"
      print re.findall(r"\d*(?:\.\d+)?",y)
      

      【讨论】:

      • 感谢关于“findall”的补充说明。
      【解决方案4】:

      您可以使用以下正则表达式进行拆分:[, ]+

      例子:

      import re
      
      pattern = r'[,\s]+'
      
      row = "0    0    .1        .05       .05       0.        0.         .01"
      re.split(pattern, row)
      # > ['0', '0', '.1', '.05', '.05', '0.', '0.', '.01']
      
      row = "0,0,.1,.05,.05,0.,0.,.01"
      re.split(pattern, row)
      # > ['0', '0', '.1', '.05', '.05', '0.', '0.', '.01']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-22
        • 2016-07-05
        • 1970-01-01
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 2011-12-26
        相关资源
        最近更新 更多