如何将文本块与C#Regex匹配

如何将文本块与C#Regex匹配,c#,.net,regex,C#,.net,Regex,我有一个文本文件,其中有数百行符合以下模式: [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 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)){“行数”}
但是变量的数量不是恒定的,所以这不起作用


希望这有意义!你知道我做错了什么吗?我不熟悉正则表达式。

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

我尝试过这种模式,效果很好:

\[Part.*A..\](.|\n)*(^LastVariable3)

使用
RegexOptions.Singleline
regex模式

(\[Part\s[^\]]+\s\d+\.A\s\d+\].*?)(?=(?:[\n\r]\[Part\s[^\]]+\s\d+\.A\s\d+\]|\Z))