2012-10-21 5 views
1

C# 정규식과 텍스트의 블록을 일치하는 방법 : ...나는이 패턴에 따라 수백 줄의 텍스트 파일이

[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] 
(...) 

내가 [파트로 시작하는 각 블록을 추출 할 필요를 *] 그리고 다음 "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)){"number of lines"}을 시도했지만 변수 수는 일정하지 않으므로 작동하지 않습니다.

희망이 이뤄졌습니다! 내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까? Regex는 처음이야.

+0

([C#에서/쓰기 INI 파일 읽기] http://stackoverflow.com/questions/217902/c-sharp-reading-writing-in-file) –

답변

0

두 번째 시도는 매우 근접합니다. 여분의 펜 ())을 잊어 버렸습니다. 또한 RegexOptions.Singleline 대신 RegexOptions.Multiline을 사용해야합니다.

나는이 패턴을 시도하고 그 일 :

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

사용 RegexOptions.Singleline에게 정규식 패턴을

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