我正在将C++程序的某些部分转换为Python,但是替换C函数strtod遇到了一些麻烦。
我正在处理的字符串由简单的数学式方程式组成,例如“KM/1000.0”。问题是常量和数字都混合在一起,因此我无法使用float()。

如何编写Python函数来模拟strtod,它同时返回转换后的数字和下一个字符的位置?

最佳答案

我不知道有任何现有功能可以做到这一点。

但是,使用正则表达式编写一个很容易:

import re

# returns (float,endpos)
def strtod(s, pos):
  m = re.match(r'[+-]?\d*[.]?\d*(?:[eE][+-]?\d+)?', s[pos:])
  if m.group(0) == '': raise ValueError('bad float: %s' % s[pos:])
  return float(m.group(0)), pos + m.end()

print strtod('(a+2.0)/1e-1', 3)
print strtod('(a+2.0)/1e-1', 8)

更好的整体方法可能是构建一个lexical scanner,该ojit_a首先对表达式进行标记,然后使用一系列标记而不是直接与字符串一起使用(或者实际上是整个过程并构建yacc样式的解析器)。

关于python - 相当于C strtod的Python,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7564899/

10-09 08:21