需要将字符串转换为正则表达式的支持

时间:2019-07-17 06:42:31

标签: python

我有一个像'((30 >=50) and (20 <= 100)) or (52 > 35)'这样的字符串。

我想将其转换为正则表达式并求值。

例如,value = ((30 >=50) and (20 <= 100)) or (52 > 35)

应根据对该表达式的求值返回true或false

2 个答案:

答案 0 :(得分:1)

您不能使用正则表达式确定带有任意括号的字符串在语法上是否实际上正确(即,每个括号都闭合),因为它从根本上更复杂(您需要基于堆栈的解决方案来解决上下文无关的语法类问题) ),而不是正则表达式可以处理的内容(简单的DFA)。

因此,您需要重新考虑如何解决此问题。

也就是说,这是一个小程序,它检查表达式是否具有平衡的括号数量,然后评估结果。

def is_correct_expression(expr: str) -> bool:
    pars = []
    try:
        for c in expr:
            if c == '(':
                pars.append(c)
            if c == ')':
                pars.pop()
        return True
    except IndexError:
        return False


if __name__ == '__main__':
    expr = '((30 >=50) and (20 <= 100)) or (52 > 35)'

    if is_correct_expression(expr):
        result = eval(expr)
        print(result)
    else:
        print('invalid expression')

输出:

True

答案 1 :(得分:1)

您可以使用eval()来获取字符串的结果。

在您的情况下,它将是value = eval('((30 >=50) and (20 <= 100)) or (52 > 35)')