2013-02-24 118 views
0

我有一个动态更改的字符串,它使用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'和sin(0.08)对sin(0.8)等等......)。鉴于我在正则表达式方面的知识有限,我无法着手解决这个问题。所以基本上,我该如何修改给定的正则表达式,以便在小数点后立即忽略零?谢谢!

+0

看看向前断言:http://www.regular-expressions.info/lookaround.html – 2013-02-24 08:25:24

+3

我使用负回顾后尝试:'应用re.sub(R'(<\) \ b0 +(?!\ b)','',a)',它似乎正在工作。它看起来是否适合你们? – Crust3 2013-02-24 09:30:00

+0

是的,但你应该写'\ B'而不是'(?!\ b)'(意思是相同的,看起来更好)。 – 2013-02-24 10:19:43

回答

0

您真的需要使用eval吗?如果你只需要一个字符串转换为数字,可以使用float

>>> float('0010.001') 
10.001 
+2

我使用'eval'的原因是因为@martineau在上面提出,字符串可以有多个数字,来自数学模块的函数和一些我自己的函数他们都可以一起在一个字符串中。例如“0.08 + 030 + sin(pi/6)+ ...” – Crust3 2013-02-24 22:37:28

0

由于功能要求mark a comment as an answer继续下降,我在这里复制上面的解决方案。

我使用负回顾后尝试:re.sub(r'(?<!\.)\b0+(?!\b)', '', a),它似乎是工作。它看起来是否适合你们? ?! - Crust3