繁体   English   中英

多行正则表达式C#

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM