2

我有一个包含数百行遵循此模式的文本文件:

[Part 1.SubPart 2.A 1]
Variable=value
(...)
LastVariable1=value
[Part 1.SubPart 2.B 2]
Variable=value
(...)
LastVariable2=value
[Part 1.SubPart 2.C 3]
Variable=value
(...)
LastVariable3=value
[Part 1.SubPart 3.A 1]
(...)

我需要提取以[Part...A *]开头并在下一个“A”块开始之前结束的每个块。

最后一个变量“LastVariable3”在所有部分中都有一个常量名称,出于我的目的可以忽略。

我已经尝试根据此处的其他帖子使用以下表达式,但它们不起作用。

var pattern = new Regex(@"\[Part.*A..\])(.*)(^LastVariable3)",RegexOptions.Singleline);

var pattern = new Regex(@"\[Part.*A..\])(.|\n)*(^LastVariable3)",RegexOptions.Singleline);

...它们总是一次匹配整个文件中的所有部分块,而不是一次匹配一个。

我也尝试过 (\[Part.*A..\]\n)(.*(\n)){"number of lines"},但变量的数量不是恒定的,所以这不起作用。

希望这是有道理的!关于我做错了什么的任何想法?我是正则表达式的新手。

4

2 回答 2

1

您的第二次尝试非常接近。您只是忘记了一个额外的括号 ( ))。此外,您需要使用RegexOptions.Multiline而不是RegexOptions.Singleline.

我已经尝试过这种模式并且它有效:

\[Part.*A..\](.|\n)*(^LastVariable3)
于 2012-10-21T16:39:28.887 回答
1

使用RegexOptions.Singleline正则表达式模式

(\[Part\s[^\]]+\s\d+\.A\s\d+\].*?)(?=(?:[\n\r]\[Part\s[^\]]+\s\d+\.A\s\d+\]|\Z))
于 2012-10-21T16:41:16.640 回答