如何在C#中逐行阅读?

如何在C#中逐行阅读?,c#,.net,regex,C#,.net,Regex,如何在下面的表达式中逐行阅读 CurrentTime=04/24/16 09:57:23 san-ls-02022;ENEXRHO;1505;{call Pm_I_AuthFailToPTSF(631706,-21,?)} ass bbbb CurrentTime=04/24/16 09:57:23 631706 aaa bbb 我想把这个表达式从当前时间写到当前时间。 例如: (?<=(?<=CurrentTime\=)[0-9].*)\n(.*) 到其他当前时间标志。您可以

如何在下面的表达式中逐行阅读

CurrentTime=04/24/16 09:57:23
san-ls-02022;ENEXRHO;1505;{call Pm_I_AuthFailToPTSF(631706,-21,?)}
ass
bbbb
CurrentTime=04/24/16 09:57:23
631706
aaa
bbb
我想把这个表达式从当前时间写到当前时间。 例如:

(?<=(?<=CurrentTime\=)[0-9].*)\n(.*) 
到其他当前时间标志。

您可以使用

(?sm)^CurrentTime=([^\n]*)\n(.*?)(?=^CurrentTime=|\z)

模式匹配

  • ^
    -行的开头(因为使用了
    /m
    修饰符)
  • CurrentTime=
    -文字字符序列
    CurrentTime=
  • ([^\n]*)\n
    -匹配并捕获第1组中除换行符以外的零个或多个字符,并且只匹配以下换行符
  • (.*)
    -第2组捕获零个或多个任意字符(包括使用DOTALL
    /s
    修饰符后的换行符),但尽可能少,直到第一个字符
  • (?=^CurrentTime=|\z)
    -
    CurrentTime=
    在行首或字符串结尾(
    \z
性能更新

要展开当前正则表达式,只需使用带一些附加分组和负前瞻的否定字符类:

(?m)^CurrentTime=([^\n]*)\n([^\n]*(?:\n(?!CurrentTime=)[^\n]*)*)

在.NET中:

var input = "CurrentTime=04/24/16 09:57:23\nsan-ls-02022;ENEXRHO;1505;{call Pm_I_AuthFailToPTSF(631706,-21,?)}\nass\nbbbb\nCurrentTime=04/24/16 09:57:23\n631706\naaa\nbbb\n"; 
var pat = @"(?m)^CurrentTime=([^\n]*)\n([^\n]*(?:\n(?!CurrentTime=)[^\n]*)*)";
var results = Regex.Matches(input, pat)
            .Cast<Match>()
            .Select(p => p.Groups[2].Value)  // Get the capture group 2 values
            .ToList();
Console.WriteLine(string.Join("\n---\n", results));
var input=“CurrentTime=04/24/16 09:57:23\nsan-ls-02022;ENEXRHO;1505;{调用Pm_I_AuthFailToPTSF(631706,-21,?)}\nass\nbbbb\nccurrentTime=04/24/16 09:57:23\n631706\naaa\nbbb\n”;
var pat=@“(?m)^CurrentTime=([^\n]*)\n([^\n]*(?:\n(?!CurrentTime=)[^\n]*)”;
var results=Regex.Matches(输入,pat)
.Cast()
.Select(p=>p.Groups[2].Value)//获取捕获组2的值
.ToList();
Console.WriteLine(string.Join(“\n--\n”,results));


请参见

这是构建模式的最简单方法(遵循正向前瞻的惰性点匹配模式),您可以展开它以获得更好的性能。OP想要的只是:
san-ls-02022;ENEXRHO;1505;{呼叫Pm_I_AuthFailToPTSF(631706,-21,)}ass bbbb
OP不希望时间戳在CurrentTime之后..请检查此答案-。我现在正在喂我的女儿,如果你有困难,我会提供一个示例代码,比如应该有帮助,
组[1]。Value
组[2]。Value
将保存你需要的文本。如果你不需要CR,只需使用
.Trim()
来去除前导/尾随空格。实际上在这个正则表达式中:(CurrentTime\=.*)((\n.*)+(CurrentTime\=.*)第二个组(\n.*)在“CurrentTimes”之间给我行。
var input = "CurrentTime=04/24/16 09:57:23\nsan-ls-02022;ENEXRHO;1505;{call Pm_I_AuthFailToPTSF(631706,-21,?)}\nass\nbbbb\nCurrentTime=04/24/16 09:57:23\n631706\naaa\nbbb\n"; 
var pat = @"(?m)^CurrentTime=([^\n]*)\n([^\n]*(?:\n(?!CurrentTime=)[^\n]*)*)";
var results = Regex.Matches(input, pat)
            .Cast<Match>()
            .Select(p => p.Groups[2].Value)  // Get the capture group 2 values
            .ToList();
Console.WriteLine(string.Join("\n---\n", results));