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

时间:2023-01-16 15:46:45

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。