[英]Multiline Group Regex c#
我已经搜索了,但是我不知道自己是怎么做的。 我正在尝试使用c#中的Regex从文本文件中的每个“块”中获取“图像名称”。 文字如下所示:
begin block Block_test
LowFlight_005_001 strip_id 5
LowFlight_005_002 strip_id 5
LowFlight_006_005 strip_id 6
LowFlight_006_004 strip_id 6
LowFlight_006_003 strip_id 6
LowFlight_006_002 strip_id 6
LowFlight_006_001 strip_id 6
LowFlight_007_001 strip_id 7
LowFlight_007_002 strip_id 7
LowFlight_007_003 strip_id 7
LowFlight_007_004 strip_id 7
LowFlight_007_005 strip_id 7
LowFlight_007_011 strip_id 7
LowFlight_007_012 strip_id 7
LowFlight_007_013 strip_id 7
LowFlight_007_014 strip_id 7
end block
使用此正则表达式:
begin block Block_test\n( (?<image>.*?) (.*?\n))*end block
但! 命名的组图像始终只是最后一个图像,即LowFlight_007_014。 如何从每一行中选择图像。 我尝试使用多行标志,插入行的开始和结束是这样的:
begin block Block_test\n(^ (?<image>.*?) (.*?$\n))*end block
无济于事。 帮助我正则表达式向导! 我为此专门创建了一个帐户。 当然,我可以获取整个图像列表,在换行符上分割,然后清理字符串数组,但是对于科学,我很想在正则表达式中完成所有操作!
如果您不必担心文件中的其他行或多个块,我想到的最简单的正则表达式将是:
new Regex(@" (?<image>\w*) ");
它将捕获多个匹配项,每个匹配项都有一个“图像”组。
如果您必须在一个输入中考虑多个块,我怀疑您将需要使用多个正则表达式,分成多个块,然后查找图像。
如果您只需要从块中的行中查找图像,那么您的答案似乎在您的评论中:
begin block Block_test\r\n( (?<image>.*?) (.*\r\n))*end block
尽管您可能会考虑使用\\ w:
begin block Block_test\r\n( (?<image>\w*) (.*\r\n))*end block
试试这个:
begin block Block_test(?'body'.*?)end block
可以在名为gropu'body'的测试中捕获测试,但是请记住指定RegexOptions.SingleLine
。 即使使用SingleLine选项,您也可以使用:
begin block Block_test(\s+\S+\s+\S+\s\d)+
捕获每个块。
我会分担这个任务,那呢
String Block = "Begin block Block_test\n" +
" LowFlight_005_001 strip_id 5\n" +
" LowFlight_005_002 strip_id 5\n" +
" LowFlight_006_005 strip_id 6\n" +
" LowFlight_006_004 strip_id 6\n" +
" LowFlight_006_003 strip_id 6\n" +
" LowFlight_006_002 strip_id 6\n" +
" LowFlight_006_001 strip_id 6\n" +
"end block";
String[] lines = Regex.Split(Block, @"[\r\n]+");
Regex reg = new Regex(@"^\s*(?<image>.*?)\s+(.*?$)");
foreach (String item in lines) {
if (!(item.StartsWith("Begin") || item.StartsWith("end"))) {
Console.WriteLine(item);
Match result = reg.Match(item);
Console.WriteLine(result.Groups["image"]);
}
}
Console.ReadLine();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.