我想要一个正则表达式模式来匹配具有以下模式的文本文件中的所有行:
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();
