繁体   English   中英

如何使用C#正则表达式匹配文本块

[英]How to match a block of text with C# 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 ... A *]开头并在下一个“ A”块开始之前结束的每个块。

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

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

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

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

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

我也尝试过(\\[Part.*A..\\]\\n)(.*(\\n)){"number of lines"}但是变量数不是常数,所以这行不通。

希望这有道理! 关于我在做什么错的任何想法吗? 我是Regex的新手。

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

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

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

我尝试过这种模式,它的工作原理是:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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