用于中缀计算器的Python正则表达式

时间:2015-11-12 00:59:09

标签: python regex

我需要一个正则表达式才能抓住......

( ) + - * /

OR

以下两种格式的数字......

xxx.xxx

IE 3.14159

xxx

IE 42

我有......

re.findall('[+-/*//()]|\d+(\.\d+)?', noWhitespaces)

以下表达式......

(2.0 + 2.0) / 1

......正在产生......

['', '.0', '', '.0', '', '', '']

我不知道为什么。

我有......

re.findall('[+-/*//()]|\d+\.\d+', noWhitespaces)

适用于xxx.xxx格式IE 2.0中的数字和运算符但不适用xxx格式的数字,IE 1

编辑:确切的代码......

noWhitespaces = re.sub(r'\s+', '', s)
print(noWhitespaces)
tokens = re.findall(r'[-+/*//()]|\d+(\.\d+)?', noWhitespaces)
print(tokens)

1 个答案:

答案 0 :(得分:2)

\d+\.\d+中将第二个点部分设为可选。

>>> import re
>>> s = '(2.0 + 2.0) / 1'
>>> re.findall(r'[-+/*()]|\d+(?:\.\d+)?', s)
['(', '2.0', '+', '2.0', ')', '/', '1']

请注意,您需要将捕获组设为非捕获组,因为findall应该首先提供捕获。这就是你在输出中得到.0的原因,即捕获组捕获的字符串。