1

数式のリストから有効なブール数式(A'+ BC(D + E)など)を検索したいと思います。それを行うための正規表現に関するヘルプはありますか?

4

2 に答える 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 に答える