0

私は次のような3つの文字列を持っています

string a = "[ERROR] = any thing And [ID] > 20 And [NAME] like Varun";
string b = "[AGE] < 60 Or [ERROR] like Exception And [ID] > 20 And [NAME] like Varun And [ERROR] = any thing ";
string c = "[ID] > 20 And`enter code here` [NAME] like Varun And [ERROR] = any thing";

[ERROR] から And/Or..... のような次の演算子までの文字列を削除したい

みたいな答えが欲しい

string a = "[ID] > 20 And [NAME] like Varun";
string b = "[AGE] < 60 And [ID] > 20 And [NAME] like Varun";
string c = "[ID] > 20 And [NAME] like Varun";

どうすれば削除できますか..???

4

1 に答える 1

2

正規表現に慣れていない場合 (そうでないことを前提としています)、次の疑似コードを使用できます。

  1. 文字列を単語に分割します (スペースで区切ります)

  2. 単語のリストをスキャンし、等しい場合は[ERROR]、次の単語で始まり、次[で終わる単語まですべての単語をスキップします]

  3. 単語が で始まり で[終わる場合、]それを出力に追加し、それに続くすべての単語のうち a で始まらず a[で終わる単語を追加し]ます。

    public static String FilterString(string value)
    {
      string[] lsWords = value.Split(' ');
      StringBuilder lsbBuilder = new StringBuilder();
    
      bool lbIncluding = true;
    
      foreach(String lsWord in lsWords)
      {
        if (lsWord.StartsWith("[") && lsWord.EndsWith("]"))
           lbIncluding = (lsWord != "[ERROR]");
    
        if (lbIncluding)
        {
          if (lsbBuilder.Length > 0) lsbBuilder.Append(' ');
          lsbBuilder.Append(lsWord);
        }
      }
    
      return lsbBuilder.ToString();
    }
    

    ....

    string a = "[ERROR] = any thing And [ID] > 20 And [NAME] like Varun";
    string b = "[AGE] < 60 Or [ERROR] like Exception And [ID] > 20 And [NAME] like Varun And [ERROR] = any thing ";
    string c = "[ID] > 20 And`enter code here` [NAME] like Varun And [ERROR] = any thing";
    
    a = FilterString(a);
    b = FilterString(b);
    c = FilterString(c);
    

出力は次のとおりです。

[ID] > 20 And [NAME] like Varun
[AGE] < 60 Or [ID] > 20 And [NAME] like Varun And
[ID] > 20 And`enter code here` [NAME] like Varun And

これはANDS / ORSなどを取り除くものではありません。自分でそれを行う必要がありますが、これはあなたに良い出発点を与えるはずです.

于 2012-08-24T04:48:34.490 に答える