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);

...一度に 1 つずつではなく、常に WHOLE ファイル内のすべてのパーツ ブロックに一致します。

私も試しまし (\[Part.*A..\]\n)(.*(\n)){"number of lines"}たが、変数の数は一定ではないため、これは機能しません。

これが理にかなっていることを願っています!私が間違っていることについてのアイデアはありますか?私は正規表現が初めてです。

4

2 に答える 2

1

2回目の試みは非常に近いです。余分なパレン()を忘れただけ)です。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 に答える