I want a regex to match complex mathematical expressions. However I will ask for an easier regex because it will be the simplest case.
我想要一个regex来匹配复杂的数学表达式。但是,我将要求更简单的regex,因为这是最简单的情况。
Example input: 1+2+3+4
示例输入:1 + 2 + 3 + 4
I want to separate each char: [('1', '+', '2', '+', '3', '+', '4')]
我想单独的每个字符:[(' 1 ',' + ',' 2 ',' + ',' 3 ',' + ',' 4 '))
With a restriction: there has to be at least one operation (i.e. 1+2
).
有一个限制:必须至少有一个操作(即1+2)。
My regex: ([0-9]+)([+])([0-9]+)(([+])([0-9]+))*
or (\d+)(\+)(\d+)((\+)(\d+))*
我的正则表达式:([0 - 9]+)([+])([0 - 9]+)(((+))([0 - 9]+))*或(\ d +)(\ +)(\ d +)((\ +)(\ d +))*
Output for re.findall('(\d+)(\+)(\d+)((\+)(\d+))*',"1+2+3+4")
:
输出re.findall('(\ d +)(\ +)(\ d +)((\ +)(\ d +))*’,“1 + 2 + 3 + 4”):
[('1', '+', '2', '+4', '+', '4')]
[('1'、'+'、'2'、'+4'、'+'、'4')]
Why is this not working? Is Python the problem?
为什么它不能工作?Python是问题吗?
2 个解决方案
#1
3
You could go the test route.
See if its valid using re.match
then just get the results with re.findall
你可以走测试路线。使用re.match查看它是否有效,然后使用re.findall获取结果
Python code
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")
Output
输出
Matched
['1', '+', '2', '+', '3', '+', '4']
#2
0
You need ([0-9]+)([+])([0-9]+)(?:([+])([0-9]+))*
你需要([0 - 9]+)([+])([0 - 9]+)(?:([+])([0 - 9]+))*
you get the '+4' for the group is out the last two expressions (([+])([0-9]+)).
组的'+4'输出最后两个表达式(([+])([0-9]+)。
the ?: indicate to python dont get de string for this group in the output.
指示python不要在输出中为这个组获取de string。
#1
3
You could go the test route.
See if its valid using re.match
then just get the results with re.findall
你可以走测试路线。使用re.match查看它是否有效,然后使用re.findall获取结果
Python code
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")
Output
输出
Matched
['1', '+', '2', '+', '3', '+', '4']
#2
0
You need ([0-9]+)([+])([0-9]+)(?:([+])([0-9]+))*
你需要([0 - 9]+)([+])([0 - 9]+)(?:([+])([0 - 9]+))*
you get the '+4' for the group is out the last two expressions (([+])([0-9]+)).
组的'+4'输出最后两个表达式(([+])([0-9]+)。
the ?: indicate to python dont get de string for this group in the output.
指示python不要在输出中为这个组获取de string。