我正在努力将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)
Run Code Online (Sandbox Code Playgroud)
更好的整体方法可能是构建一个词法扫描器,首先对表达式进行标记,然后使用标记序列而不是直接使用字符串(或者确实全力以赴构建 yacc 风格的解析器)。