如何将文本块与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))