我需要一个正则表达式才能抓住......
( ) + - * /
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)
答案 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
的原因,即捕获组捕获的字符串。