1

次のパターンを持つテキストファイルのすべての行に正規表現パターンを一致させたいのですが。

TcQuery {dynamic_content} Alias "{dynamic_content}" New

テキストファイルに次の2行がある場合:

//tcquery c_query alias "qrybklog" new           <= This one shouldn´t be found because there is two backslashes before TcQuery.

tcquery c_query alias "qrybklog" new             <= I want a pattern to match this line

私はこれを試しましたが、両方の行が一致しています:

        var prw = System.IO.File.ReadAllText(@"d:\backlog.prw", Encoding.ASCII);

        prw = "//TcQuery c_query Alias teste1 new";
        prw = "\nTcQuery c_query Alias teste2 new";
        prw = "\nTcQuery c_query Alias teste3 new";
        prw = "\n//TcQuery c_query Alias teste4 new";
        var regexTcQuery = new Regex("TcQuery+[ *]+[0-9a-zA-Z_]+[ *]+alias+[ *]+[0-9a-zA-Z_\"]+[ *]new$", RegexOptions.IgnoreCase);

        var resultTcQuery = regexTcQuery.Matches(prw);
4

4 に答える 4

6

この正規表現での使用singlelineとオプションignorecase

(?<!\/\/)\s*?\btcquery\b(.*?)\balias\b.*?new

(?<!\/\/)//前にチェックtcquery

.*?は怠惰に0から多くの文字に一致します。を使用する.*と、一致間の最後のtcqureyスキップにtcquery一致します。

\bnon-word境界です。これにより、別々の単語を一致させることができます

\sスペースに一致0manyます。[\n\r\t\f]


c_queryテキストを取得したい場合は、これを行うことができます

List<string> lst=Regex.Matches(input,@"(?<!\/\/)\s*?\btcquery\b(.*?)\balias\b.*?new").Cast<Match>().Select(x=>x.Groups[1].Value).ToList();
于 2012-11-05T16:14:01.650 に答える
2

(サブグループなしで)フルラインに一致させたい場合は、次を使用できます。

^tcquery.*$

^、テキストが文字列の先頭から始まることを示します。直後のテキストなのでtcquery、で始まる行は//無視されます。

の前に空白がある場合は、これを次tcqueryのように一致させることができます。\s*

^\s*tcquery.*$

で始まる行があるがtcquery、必ずしも指定した形式に従う必要がない場合は、次のようにパターンを更新できます。

^\s*tcquery.*alias.*new.*?$

行の「動的」コンテンツ部分をグループに一致させるには、次を使用できる必要があります。

^\s*tcquery\s+(.*)\s+alias\s+"(.*)"\s+new.*?$

また、注目に値するのは、上記の例のそれぞれに対して、大文字と小文字を区別しない正規表現オプションを有効にする必要があります。

于 2012-11-05T16:13:09.190 に答える
0

これを試して:

^tcquery [^ ]+ alias "[^"]+" new

これはアマチュアのものですが、主なアイデアは、行がtcqueryで始まらなければならないということです。

于 2012-11-05T16:19:32.540 に答える
0
([^\/\/])tcquery (.*) alias \"(.*)\" new$/i

お使いの言語がケースレスマッチングの/iをサポートしていない場合は、正規表現を次のように切り替えてください。

([^\/\/])TcQuery (.*) Alias \"(.*)\" New$
于 2012-11-05T16:18:34.177 に答える