我想要一个正则表达式来匹配复杂的数学表达式。 但是我会要求更简单的正则表达式,因为它将是最简单的情况。
示例输入: 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是问题吗?
答案 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。