【发布时间】:2014-03-29 12:13:19
【问题描述】:
作为一个练习,我试图想出一个正则表达式来评估简单的代数,比如
q = '23 * 345 - 123+65'
从这里我想得到'23'、'*'、'345'、'-'、'123'、'+'、'65'。
现在,我搜索了类似的问题,其他人已经解决了这个问题。但我真正想知道的是为什么 my 解决方案不起作用。
这是我得到的最好的:
regexparse = '(\d+\s*(\*|\/|\+|\-)\s*)+(\d+\s*)'
解释
- (\d+\s*(*|/|+|-)\s*)+
- ( 一个或多个数字 \d+ 后面可以跟空格 \s* 然后必须跟一个符号 (*|/|+|-) 然后后面可以跟更多空格 \s* 和整个事情必须至少出现一次)+
- (\d+\s*)
- 一个或多个数字,后面可以跟空格
但是,当我运行代码时
m = re.match(regexparse, q)
print m.group(0)
print m.group(1)
print m.group(2)
print m.group(3)
我明白了
23 * 345 - 123+65
123+
+
65
所以就像第一个块匹配尽可能少的字符一样。为什么?
【问题讨论】: