Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-使用未知分隔符拆分数值字符串_Python_Regex_String_Split - Fatal编程技术网

Python-使用未知分隔符拆分数值字符串

Python-使用未知分隔符拆分数值字符串,python,regex,string,split,Python,Regex,String,Split,我需要从一个格式不好的字符串中解析数值。例如: "0 0 .1 .05 .05 0. 0. .01" 或 正如您所看到的,分隔符可以是多个空格,也可以是不带空格的逗号。此外,数字可以是整数或浮点数。我想拆分任意数量的连续空格、制表符和逗号。我想我可以使用str.split()函数来实现这一点,但是我发现它只适用于一个分隔符参数,默认情况下不会使用逗号 有人知道一个聪明的方法吗?可能是正则表达式 提前感谢。您可以使用

我需要从一个格式不好的字符串中解析数值。例如:

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

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

有人知道一个聪明的方法吗?可能是正则表达式


提前感谢。

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

例如:

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']

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

s.replace(',', ' ').split()
演示:


您可以使用
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)
我想拆分任意数量的连续空格、制表符和逗号

可以使用正则表达式进行拆分

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

['0', '0', '.1', '.05', '.05', '0.', '0.', '.01']

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

感谢您在正则表达式框(+1)之外进行思考。感谢您在“findall”上添加的注释。
import re
y="0,0,.1,.05,.05,0.,0.,.01"
print re.findall(r"\d*(?:\.\d+)?",y)
>>> import re
>>> s = '0    0    .1        .05       .05       0.        0.         .01'
>>> re.split(r'[\s,]+', s)

['0', '0', '.1', '.05', '.05', '0.', '0.', '.01']