首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Python中将布尔表达式解析为字符串

在Python中将布尔表达式解析为字符串
EN

Stack Overflow用户
提问于 2021-04-16 23:12:07
回答 2查看 97关注 0票数 1

我想用python编写一个解析器程序,它解析给定的字符串并将其存储在树数据结构中。

示例输入:"(1 OR (2 AND 3) OR 4)“

预期输出:

有没有人能带我通过。

EN

回答 2

Stack Overflow用户

发布于 2021-04-17 02:05:32

eval是word,你要找的,最简单的方法是

代码语言:javascript
复制
def FUNC1(f1):
    ''' do you logic'''
    print('In FUNC1 --',locals())
    print('returning 10')
    return 10 #dummy

      
def FUNC2(f2):
    ''' do you logic'''

    print('In FUNC2 --',locals())
    print('returning 20')
    return 20 #dummy

      
def AND(*args):
    ''' do you logic'''

    print('In AND --',locals())
    print('returning 30')
    return 30 #dummy


def OR(*args):
    ''' do you logic'''

    print('In OR --',locals(),)
    print('returning 40')
    return 40 #dummy

expression = 'FUNC1(OR(1,FUNC2(AND(2,3)),4))'

## evaluate expression
eval(expression)

##output      
##In AND -- {'args': (2, 3)}
##returning 30
##In FUNC2 -- {'f2': 30}
##returning 20
##In OR -- {'args': (1, 20, 4)}
##returning 40
##In FUNC1 -- {'f1': 40}
##returning 10

另一种方式是https://docs.python.org/3/library/ast.html

票数 1
EN

Stack Overflow用户

发布于 2021-04-17 00:26:02

对于更复杂的字符串解析,你应该考虑使用正则表达式,Python中有一个名为re的库提供了它:

代码语言:javascript
复制
import re

pattern = '[0-9]'
nums = re.findall(pattern, '(1 OR (2 AND 3) OR 4)')

print(nums)
>>> ['1', '2', '3', '4']

https://docs.python.org/3/library/re.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67127813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档