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

1 投票
2 回答
2288 浏览
提问于 2025-04-17 16:55

我有一个动态变化的字符串,这个字符串是用eval()来计算的。现在,对于以'0'开头的数字,它会被当作八进制数来处理。比如,eval('030')的结果是24。

还有另一个讨论串提到类似的问题(如何将字符串中的所有八进制值作为整数计算)。讨论中的解决方案提到了一种正则表达式。

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

这个方法在大多数情况下都能正常工作,但当我需要计算比如'0.08'时,上面提到的正则表达式就不太好用了,因为它会把小数点后的零去掉(把'0.08'变成'0.8',把sin(0.08)变成sin(0.8),等等)。由于我对正则表达式的了解有限,我不知道该怎么解决这个问题。所以,基本上,我该如何修改这个正则表达式,让它忽略小数点后面的零呢?谢谢!

2 个回答

0

由于对将评论标记为答案的功能请求一直没有通过,我把上面的解决方案复制到这里。

我试着用了一种叫做“负向前瞻”的方法:re.sub(r'(?<!\.)\b0+(?!\b)', '', a),看起来是有效的。你们觉得这样做对吗? – Crust3

0

你真的需要使用 eval 吗?如果你只是想把一个字符串转换成数字,可以直接用 float

>>> float('0010.001')
10.001

撰写回答