为什么这些正则表达式不起作用?

时间:2017-06-05 22:22:47

标签: regex python-3.6 mathematical-expressions

我想要一个正则表达式来匹配复杂的数学表达式。 但是我会要求更简单的正则表达式,因为它将是最简单的情况。

示例输入: 1 + 2 + 3 + 4

我想分开每个字符: [('1', '+', '2', '+', '3', '+', '4')]

使用限制:必须至少有一项操作(即1+2)。

我的正则表达式:([0-9]+)([+])([0-9]+)(([+])([0-9]+))*(\d+)(\+)(\d+)((\+)(\d+))*

re.findall('(\d+)(\+)(\d+)((\+)(\d+))*',"1+2+3+4")

输出

  

[('1','+','2','+ 4','+','4')]

为什么这不起作用? Python是问题吗?

2 个答案:

答案 0 :(得分:3)

你可以去测试路线 使用 re.match
查看它是否有效 然后用 re.findall

获得结果

Python代码

import re

input = "1+2+3+4";
if re.match(r"^\d+\+\d+(?:\+\d+)*$", input) :
    print ("Matched")
    print (re.findall(r"\+|\d+", input))

else :
    print ("Not valid")

输出

Matched
['1', '+', '2', '+', '3', '+', '4']

答案 1 :(得分:0)

你需要([0-9] +)([+])([0-9] +)(?:([+])([0-9] +)) *

你得到了' + 4'对于该组,最后两个表达式([+])([0-9] +)

?:表示python在输出中没有为该组获取de string。