0

まず最初に、私はC#正規表現しか使用できないため、他の言語や非正規表現ソリューションを提案しても役に立ちません。今質問。

コード内のすべての文字列を検索する必要があります(数千ファイル)。基本的に6つのケースがあります:

   string a = "something"; // output" "something"
   sring b = "something else" + " more"; // output: "something else" and " more"
   Print("this should match"); // output: "this should match"
   Print("So" + "should this"); // output: "So" and "should this"
   Debug("just some bebug text"); // output: this should not match
   Debug("more " + "debug text"); // output: this should not match

正規表現は最初の4つと一致する必要があります(引用符の中にあるものだけが必要であり、Printは他の関数でもかまいません)

これまでのところ、これは引用符で囲まれたものを返します。

 ".*?"
4

1 に答える 1

1

要するに: @"^(?!Debug\("")([^""]*""(?<Text>[^""]*)"")*.*$"

内容:

  • 文字列がで始まる場合、文字列と一致しませんDebug("
  • 最初の文字列に出会うまで文字列に沿って走り、それ"を通過します
    • "が見つからず、文字列の最後に到達した場合は、停止します。
  • 名前の付いたグループへの「記録」を開始しますText
  • 次の弦に出会うまで弦に沿って走り"、録音を停止し、それを通り過ぎます。
  • 手順2に戻ります

結果:"と呼ばれるグループ内のの間にすべての文字列がありますText

やるべきこと:\sそれを複数行の正規表現に変換し、より良いフィルターとしてデバッグの前にwhitepsaces()をサポートします。

その他の使用例とテスト:

var regex = new Regex(@"^(?!Debug\("")([^""]*""(?<Text>[^""]*)"")*.*$");

var inputs = new[]
                 {
                     @"string a = ""something"";",
                     @"sring b = ""something else"" + "" more"";",
                     @"Print(""this should match"");",
                     @"Print(""So"" + ""should this"");",
                     @"Debug(""just some bebug text"");",
                     @"Debug(""more "" + ""debug text"");"
                 };

foreach (var input in inputs)
{
    Console.WriteLine(input);
    Console.WriteLine("=====");

    var match = regex.Match(input);

    var captures = match.Groups["Text"].Captures;

    for (var i = 0; i < captures.Count; i++)
    {
        Console.WriteLine(captures[i].Value);
    }

    Console.WriteLine("=====");
    Console.WriteLine();
}

出力:

string a = "something";
=====
something
=====

sring b = "something else" + " more";
=====
something else
 more
=====

Print("this should match");
=====
this should match
=====

Print("So" + "should this");
=====
So
should this
=====

Debug("just some bebug text");
=====
=====

Debug("more " + "debug text");
=====
=====
于 2012-06-14T03:37:42.397 に答える