Python - 使用未知分隔符拆分数值字符串
Python - Split string of numeric values with unknown delimiters
我需要从格式不正确的字符串中解析数值。示例:
"0 0 .1 .05 .05 0. 0. .01"
或
"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']
正则表达式可以,但您也可以只用 space 替换每个逗号,然后使用正则表达式 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']
您可以使用 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)
I would like to split on any number of consecutive spaces, tabs, and commas.
您可以使用 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,]+
...
我需要从格式不正确的字符串中解析数值。示例:
"0 0 .1 .05 .05 0. 0. .01"
或
"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']
正则表达式可以,但您也可以只用 space 替换每个逗号,然后使用正则表达式 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']
您可以使用 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)
I would like to split on any number of consecutive spaces, tabs, and commas.
您可以使用 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,]+
...