簡體   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