字符串eval()但忽略前导零(八进制)

时间:2013-02-24 08:23:03

标签: python regex

我有一个动态变化的字符串,使用eval()进行评估。现在对于用'0'盯着的数字,它用八进制表示。 例如。 eval('030')= 24

现在还有另一个类似问题的线程(Pythonic way to eval all octal values in a string as integers)。线程中的解决方案提到了正则表达式

re.sub(r'\b0+(?!\b)', '', some_string)

现在这在大多数情况下工作正常但是当我必须评估例如'0.08'时,上述正则表达式不能很好地完成工作,因为它删除了小数点后的零(它转换为'0.08'tp 0.8'并且罪(0.08)到罪(0.8)等等......)。鉴于我对正则表达式的了解有限,我无法继续解决这个问题。所以基本上,我如何修改给定的正则表达式,以便它在小数点后立即忽略零?谢谢!

2 个答案:

答案 0 :(得分:0)

你真的需要使用eval吗?如果您只需要将字符串转换为数字,请使用float

>>> float('0010.001')
10.001

答案 1 :(得分:0)

由于对mark a comment as an answer的功能请求仍然被拒绝,我在此处复制上述解决方案。

我尝试过使用负面的lookbehind:re.sub(r'(?<!\.)\b0+(?!\b)', '', a),它似乎正在起作用。你觉得这样对吗? - Crust3