一个可怕的人给了我一个像这样的字符串
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']
那么有没有办法分割带有多个分隔符的字符串,同时根据遇到的分隔符不同地分割字符串?
答案 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