数式のリストから有効なブール数式(A'+ BC(D + E)など)を検索したいと思います。それを行うための正規表現に関するヘルプはありますか?
質問する
2554 次
2 に答える
2
そのような正規表現はありません。ブール式には、任意のレベルのネストされた括弧を含めることができるため、非正規言語になります。
于 2012-06-09T22:18:57.640 に答える
0
たとえば、いくつかの独立したルールを使用してPythonを使用して実装しました。
式に「および」の後に「または」がないこと、または「または」の後に「および」がないことを確認する
開き括弧'('の後には'and'、'または'以外の何かが続く必要があり、'および'または'または'の後に続く必要があります(最初に計算する場合を除く)
閉じ括弧')'の後には'and'または'または'または文字列終了文字'$'が続く必要があり、'または'、'および'以外の何かが続く必要があります
....。
これはPythonを使用した例です(ただし、PCRE regexpを使用して可変幅のルックビハインドをサポートすると仮定しています)。
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 に答える