Python 标记化数学表达式

Python 标记化数学表达式,python,tokenize,Python,Tokenize,我正在用Python编写一个调车场程序,遇到了一个数学表达式的问题,比如“3x+4*y”或“3sin(x)” 问题是Python标记化函数不知道我需要“3x”来变成[“3”、“*”“x”],而不仅仅是[“3”、“x”]。当然,我可以规定用户必须输入3*x,而不是仅输入3x,但这太差劲了。应该有一个更干净的方法来解决这个问题 以下是我正在使用的标记化代码(复制自stackoverflow帖子): 这给了我: [u'3', u'x', u'+', u'4', u'*', u'y'] 但我需要: [

我正在用Python编写一个调车场程序,遇到了一个数学表达式的问题,比如“3x+4*y”或“3sin(x)”

问题是Python标记化函数不知道我需要“3x”来变成[“3”、“*”“x”],而不仅仅是[“3”、“x”]。当然,我可以规定用户必须输入3*x,而不是仅输入3x,但这太差劲了。应该有一个更干净的方法来解决这个问题

以下是我正在使用的标记化代码(复制自stackoverflow帖子):

这给了我:

[u'3', u'x', u'+', u'4', u'*', u'y']
但我需要:

[u'3', u'*', u'x', u'+', u'4', u'*', u'y']
以便调车场代码正常工作


谢谢您的帮助。

您需要注意返回的令牌的类型,并对令牌数组进行预处理以获得所需的令牌。在您的示例中,3x产生一个数字,后跟一个名称标记。插入隐含的OP令牌,您就离开了

对不起,打错了。我需要的是:可能会提供你需要的。。。也许不是。对不起
3x
在那里也不起作用。该标记器标记python代码,而不是带有一些非python语法的数学表达式。您还期望什么
tokenize
是一个“Python源代码的词法扫描程序”。它根据Python语法进行标记,当然,这不会推断出
*
运算符。。。所以看起来您需要实现自己的标记器。而且,这里没有“*”的标记。这种事情应该在解析过程中发生,您无论如何都需要对表达式求值。
[u'3', u'*', u'x', u'+', u'4', u'*', u'y']