拆分一个无间隙的十进制值字符串 - Python

时间:2016-05-14 03:42:48

标签: python string list split delimiter

一个可怕的人给了我一个像这样的字符串

values = '.850000.900000.9500001.000001.50000'

我需要拆分它以创建以下列表:

['.850000', '.900000', '.950000', '1.00000', '1.500000']

我知道我只处理数字< 1我可以使用代码

dl = '.' 
splitvalues = [dl+e for e in values.split(dl) if e != ""]

但是在像这样的情况下,字符串中有大于1的数字,splitvalue最终会被

['.850000', '.900000', '.9500001', '.000001', '.50000']

那么有没有办法分割带有多个分隔符的字符串,同时根据遇到的分隔符不同地分割字符串?

6 个答案:

答案 0 :(得分:2)

我认为这有点接近固定宽度格式字符串。尝试使用这样的正则表达式:

import re

str = "(\d{1,2}\\.\d{5})"
m = re.search(str, input_str)
your_first_number = m.group(0)

对剩余的字符串重复尝试,以消耗所有数字。

答案 1 :(得分:1)

假设小数点前的值小于10,然后我们有,

values = '0.850000.900000.9500001.000001.50000'

result = list()
last_digit = None 

for value in values.split('.'):
    if value.endswith('0'):
        result.append(''.join([i for i in [last_digit, '.', value] if i]))
        last_digit = None
    else:
        result.append(''.join([i for i in [last_digit, '.', value[0:-1]] if i]))
        last_digit = value[-1]

if values.startswith('0'):
    result = result[1:]

print(result)
# Output
['.850000', '.900000', '.950000', '1.00000', '1.50000']

答案 2 :(得分:1)

使用固定/变量字符串,您可以尝试类似:

values = '0.850000.900000.9500001.000001.50000'
str_list = []

first_index = values.find('.')
while first_index > 0:
    last_index = values.find('.', first_index + 1)
    if last_index != -1:
        str_list.append(values[first_index - 1: last_index - 2])
        first_index = last_index
    else:
        str_list.append(values[first_index - 1: len(values) - 1])
        break
print str_list
  

输出:

     

[' 0.8500',' 0.9000',' 0.95000',' 1.0000',' 1.5000& #39]

     

假设小数点前总是有一个数字。

     

请以此为出发点,而不是复制粘贴解决方案。

答案 3 :(得分:1)

如何使用re.split()

import re

values = '0.850000.900000.9500001.000001.50000'

print([a + b for a, b in zip(*(lambda x: (x[1::2], x[2::2]))(re.split(r"(\d\.)", values)))])

<强>输出

['0.85000', '0.90000', '0.950000', '1.00000', '1.50000']

答案 4 :(得分:1)

>>> import re
>>> source = '0.850000.900000.9500001.000001.50000'

>>> re.findall("(.*?00+(?!=0))", source)

['0.850000', '.900000', '.950000', '1.00000', '1.50000']

分割是基于寻找&#34; {任何,双零,一连串零(后跟非零)&#34;}。

答案 5 :(得分:1)

这里的数字是固定宽度,即6,如果包括点7,则获取切片。从0到7和7到14获取切片,依此类推。因为我们不需要初始零,所以我使用切片values[1:]进行提取。

values = '0.850000.900000.9500001.000001.50000'
[values[1:][start:start+7] for start in range(0,len(values[1:]),7)]
['.850000', '.900000', '.950000', '1.00000', '1.50000']

测试;

''.join([values[1:][start:start+7] for start in range(0,len(values[1:]),7)]) == values[1:]
True