【发布时间】:2013-08-21 04:04:48
【问题描述】:
如果我有一个字符串
'x+13.5*10x-4e1'
如何将其拆分为以下令牌列表?
['x', '+', '13', '.', '5', '*', '10', 'x', '-', '4', 'e', '1']
目前我正在使用 shlex 模块:
str = 'x+13.5*10x-4e1'
lexer = shlex.shlex(str)
tokenList = []
for token in lexer:
tokenList.append(str(token))
return tokenList
但这会返回:
['x', '+', '13', '.', '5', '*', '10x', '-', '4e1']
所以我试图将字母与数字分开。我正在考虑获取同时包含字母和数字的字符串,然后以某种方式拆分它们,但不确定如何执行此操作或之后如何将它们与其他字符串一起添加回列表中。令牌保持有序很重要,我不能有嵌套列表。
在理想世界中,e 和 E 不会以同样的方式被识别为字母,所以
'-4e1'
会变成
['-', '4e1']
但是
'-4x1'
会变成
['-', '4', 'x', '1']
有人可以帮忙吗?
【问题讨论】:
-
负数呢?
-
确实,
shlex模块不是这里的最佳选择;它是一个 shell 语法词法分析器和解析器,而不是数学表达式解析器。 -
@alecxe:
-在这里被视为一元运算符,导致为负数。 -
出于好奇,为什么既是显式的
*又是隐式的乘法(10x真的是10*x)?这使得解析也变得更加困难。
标签: python token tokenize equation shlex