我想在公式列表中搜索有效的布尔公式,例如 A'+BC(D+E)。对正则表达式有任何帮助吗?
问问题
2554 次
2 回答
2
没有这样的正则表达式。布尔表达式可以具有任意级别的嵌套括号,这使得它们成为一种非常规语言。
于 2012-06-09T22:18:57.640 回答
0
我使用 python 使用一些独立的规则来实现它,例如:
检查表达式是否没有'and'后跟'or',也没有'or'后跟'and'
开括号 '(' 后面必须跟除 'and'、'or' 以外的其他内容;并且必须跟在 'and' 或 'or' 之后(除非在开头计算)
右括号 ')' 必须跟在 'and' 或 'or' 或字符串结尾字符 '$' 之后,并且必须跟在 'or','and' 以外的其他内容之后
......
这是一个使用 python 的示例(但假设我们使用 PCRE 正则表达式来支持可变宽度后视):
tmp= query
tmp= re.sub("[(]", " (", query)
tmp= re.sub(" +", " ", query)
if re.search(r"\(( *and| *or| *\))", tmp) or re.search(r"(?<!\band|\bor) \(", tmp):
return False
if re.search(r"\)(?!( *or\b| *and\b|$))", tmp) or re.search(r"(\band *|\bor *)\)", tmp):
return False
if re.search(r"(\band|\bor)( and\b| or\b)", tmp) or re.search(r"(?<!\band|\bor) (?!and\b|or\b)", tmp):
return False
return True
于 2017-11-16T21:58:35.503 回答