我想拿出一个regax,它能够匹配存储在exp
中的数学表达式
表达式的模式以括号开头和结尾,不能包含任何字母。表达式可以包含整数或浮点数,运算符可以是+-*/**
。表达式的长度不受限制
这是我的正则表达式:
import re
re.match(r'^[(]([(-]?([0-9]+)[)]??)([(]?([-+/*]([0-9]))?([.]?[0-9]+)?[)])[)]*$', exp)
但是,我的正则表达式与某些字符串不匹配。 例如:
exp = '(( 200 + (4 * 3.14)) / ( 2 ** 3 ))'
exp = '(23.23+23)'
exp = '((23**2)/23)'
exp = '(23.34-(3*2))'
我是正则表达式的新手,我不确定表达式的哪一部分是错误的,请原谅我的麻烦,并希望有人能帮助我。 非常感谢你
您可以将其视为“拆分”字符串,并使用运算符作为分隔符。这将避免您试图在正则表达式中表示数字
因此,您只需要一个表达式来获取5个运算符和括号。这可以使用操作符之间的管道表示,最长的操作符(**)位于第一位
然后,您可以执行第二次传递,验证组件是否为运算符或有效数字,并检查表达式是否格式正确,是否包含匹配的括号和交替运算符/操作数。在这一点上,您将确切地知道表达式的哪一部分是不正确的
例如:
相关问题 更多 >
编程相关推荐