gpt4 book ai didi

python - 简化 AND OR bool 表达式

转载 作者:行者123 更新时间:2023-12-01 01:17:05 24 4
gpt4 key购买 nike

我的问题是转动一个看起来像这样的字符串。

 "a OR (b AND c)"
into
a OR bc

如果表达式类似于

"a AND (b OR c)"

then gives

ab OR ac

我无法使用 REGEX 匹配来设计一组正确的循环。问题的关键在于代码必须完全通用,因为我无法假设字符串模式有多长,也无法假设模式中 OR AND 的确切位置。

  • 安全或((互联网或在线或无纸化)和(银行*))和(移动或手机或电话或访问)或简单或在线银行内或交易或孟买或德里近/10琼脂或(在线或互联网)与(银行)或非或(苹果)排除(mongo)

如果我这样输入,它也会解决这种类型的表达式。

最佳答案

Imo,您需要在这里使用解析器,例如PLY。您需要定义所有的 block ,然后可以构建一个语法树,您可以用它做任何您想做的事情。
一个例子可以是:

import ply.lex as lex

# List of token names. This is always required
tokens = (
'VARIABLE',
'WHITESPACE',
'OR',
'AND',
'NOT',
'PAR_OPEN',
'PAR_CLOSE',
)

# Regular expression rules for simple tokens
t_VARIABLE = r'\b[a-z]+\b'
t_WHITESPACE = r'\s+'
t_OR = r'\bOR\b'
t_AND = r'\bAND\b'
t_NOT = r'\bNOT\b'
t_PAR_OPEN = r'\('
t_PAR_CLOSE = r'\)'

def t_error(t):
print("Illegal character '%s'" % t.value[0])
t.lexer.skip(1)

# Build the lexer
lexer = lex.lex()
lexer.input("a OR (b AND c)")

while True:
token = lexer.token()
if not token:
break
else:
print(token)

这会产生

LexToken(VARIABLE,'a',1,0)
LexToken(WHITESPACE,' ',1,1)
LexToken(OR,'OR',1,2)
LexToken(WHITESPACE,' ',1,4)
LexToken(PAR_OPEN,'(',1,5)
LexToken(VARIABLE,'b',1,6)
LexToken(WHITESPACE,' ',1,7)
LexToken(AND,'AND',1,8)
LexToken(WHITESPACE,' ',1,11)
LexToken(VARIABLE,'c',1,12)
LexToken(PAR_CLOSE,')',1,13)

它甚至可以使用嵌套括号,然后您可以分析较小的部分(例如从 PAR_OPENPAR_CLOSE 等)。

关于python - 简化 AND OR bool 表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54230139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com