0

演算子のオペランドにブラケットを追加しようとしていますOR。たとえば、次のようなステートメントがある場合、

C>O AND C>4 OR C>0 AND C>5

以下のようにフォーマットしたいと思います

(C>O AND C>4) OR (C>0 AND C>5)

以下のようにこれを行うための簡単なコードを書きました。ただし、文字列に複数のORステートメントがある場合、コードは正しく機能しません。正規表現でこれを達成できると言われました。しかし、正規表現に関する知識はほとんどありません。

string mystring = "C>O AND C>4 OR C>0 AND C>5";
int indexFound = mystring.IndexOf("OR");
string left = mystring.Substring(0, indexFound - 1);
string right = mystring.Substring(indexFound + 2, mystring.Length - (indexFound + 2));
string output = "(" + left + ")" + "OR" + "(" + right + ")";

どんな助けでも大歓迎です。

4

2 に答える 2

1

正規表現による方法は次のとおりです。

static string AddBracketsToOr(string input)
{            
    Regex regex = new Regex(@"(?<left>.+[AND|OR].+) OR (?<right>.+[AND|OR].+)");
    Match match = regex.Match(input);

    if (match == null)
        throw new Exception("Wrong input format");

    return String.Format("({0}) OR ({1})", 
                         match.Groups["left"], match.Groups["right"]);
}

使用法:

var result = AddBracketsToOr("C>O AND C>4 OR C>0 AND C>5");

更新:

"C>O AND C>4 OR C>0 AND C>5" // (C>O AND C>4) OR (C>0 AND C>5)
"C>9 OR C>O AND C>4 OR C>0 AND C>5" // (C>9 OR C>O AND C>4) OR (C>0 AND C>5)
"C>9 OR C>O OR C>0 AND C>5" // (C>9 OR C>O) OR (C>0 AND C>5)
于 2012-04-16T07:24:35.930 に答える
-1

現在、コードで正規表現を使用していません。

このメソッドは、最初の内部を.Substring()見つけて、サブストリングに分割します。したがって、あなたが説明した方法で処理できるのは最初のものだけです。ORmystringleftrightOR

mystringの出現ORが見つからなくなるまで、ループオーバーを作成する必要があります。

サンプルコード

string mystring = "C>O AND C>4 OR C>0 AND C>5";
string output = "";

int indexFound = mystring.IndexOf("OR");

// indexOf returns -1 if the string cannot be found.
// We quit our loop once -1 is returned.
while (indexFound > -1)
{
    // Compute the "left" side of our current mystring.
    string left = mystring.Substring(0, indexFound - 1);

    // And then append it to our final output variable.
    output += "(" + left + ")" + "OR";

    // Instead of directly adding the "right" side, we
    // "shorten" mystring to only contain the right side.
    // This effectively "skips" over the "left" and "OR"
    // and will allow us to process the remaining "OR"s.
    mystring = mystring.Substring(indexFound + 2)

    // Finally, we update indexFound to check if there
    // are any more "OR"s inside our mystring.
    indexFound = mystring.IndexOf("OR");
}

// Before returning, we add the remaining mystring to
// our output.  You have to decide whether you want
// to add the parentheses here.
output += "(" + mystring + ")";

それが役立つことを願っています。

于 2012-04-16T07:18:26.723 に答える