Skip to main content
 首页 » 编程设计

c#之匹配模式的正则表达式行

2024年01月22日26luoye11

我想要一个正则表达式模式来匹配具有以下模式的文本文件中的所有行:

TcQuery {dynamic_content} Alias "{dynamic_content}" New 


如果文本文件包含以下两行:

//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); 

请您参考如下方法:

在此正则表达式中使用singleline和ignorecase选项

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




(?<!\/\/)在 //之前检查 tcquery

.*?懒惰地匹配0到许多字符。如果使用 .*,它将匹配最后一个 tcqurey在 tcquery匹配之间跳过的最后一个 \b

non-word是 \s边界,这使我们可以匹配单独的单词

0将 many匹配到 [\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();