2011-09-28 6 views
2

좋아, 정규식이 많이 있지만 언제나처럼 그 중 아무 것도 내가하려는 작업과 일치하지 않는 것 같습니다. 여러 줄 정규식,여러 줄 정규식 바꾸기

F00220034277909272011         
H001500020003000009272011        
D001500031034970000400500020000000025000000515000000000 
D001500001261770008003200010000000025000000132500000000 
H004200020001014209272011        
D004200005355800007702200005142000013420000000000000000 
D004200031137360000779000005000000012000000000000000000 
H050100180030263709272011        
D050100001876700006000300019500000025000000250000001500 
D050100001247060000071500030000000025000000280000000000 
D050100002075670000430400020000000025000000515000000000 
D050100008342500007702600005700000010000000000000000700 
D050100009460270000702100015205000025000000000000006205 
D050100008135120000702400015000000010000000000000001000 
D050100006938430000702200026700000010000000000000001000 
D050100006423710008000200025700000000000000000000001000 
D050100009488040008000600007175000000000000000000001000 
D050100001299190000800100016300000000000000000000003950 
D050100001244850000800400005407000000000000000000001607 
D050100001216280000840200020000000000000001000000006200 
D050100001216840000479000008175000000000000100000001000 
D050100001265880000410200014350000000000000100000001000 
D050100007402650002000300026700000000000000100000001000 
D050100001305150002000200016175000000000001000000000000 
D050100005435430000899700022350000000000001000000000000 
D050100031113850000500200008200000000250000100000001000 

과 (.NET 맛), 나는 내가 얻을 수 있도록 대체하고 싶지 :

나는 텍스트 파일을

H050100180030263709272011        
D050100001876700006000300019500000025000000250000001500 
D050100001247060000071500030000000025000000280000000000 
D050100002075670000430400020000000025000000515000000000 
D050100008342500007702600005700000010000000000000000700 
D050100009460270000702100015205000025000000000000006205 
D050100008135120000702400015000000010000000000000001000 
D050100006938430000702200026700000010000000000000001000 
D050100006423710008000200025700000000000000000000001000 
D050100009488040008000600007175000000000000000000001000 
D050100001299190000800100016300000000000000000000003950 
D050100001244850000800400005407000000000000000000001607 
D050100001216280000840200020000000000000001000000006200 
D050100001216840000479000008175000000000000100000001000 
D050100001265880000410200014350000000000000100000001000 
D050100007402650002000300026700000000000000100000001000 
D050100001305150002000200016175000000000001000000000000 
D050100005435430000899700022350000000000001000000000000 
D050100031113850000500200008200000000250000100000001000 

그래서를, 기본적으로, 나는 [HD]0501로 시작하는 모든 것을 가져옵니다.

나는 이것이 일치하는 것이 더 적합하다고 생각하지만, Regex 패턴 문자열과 정규 표현식 문자열 만 허용하는 미리 빌드 된 엔진을 살펴볼 것입니다.

원하는 결과를 얻기 위해 패턴 및 바꾸기 문자열을 제공하려면 어떻게해야합니까? Multiline Regex는 하드 코딩 된 구성입니까?

나는 원래 이런 일이 일 것이라고 생각 :

검색 : (?<Match>^[HD]0501\d+$),하지만 아무것도 일치하지 않습니다.

검색 : (?!^[HD]0501\d+$), 그러나 이것은 빈 문자열의 무리를 일치, 그리고 내가 대체 문자열을 넣어 알아낼 수 없었다.

은 검색 : (?!(?<Omit>^[HD]0501\d+$)), "그룹 '생략은'을 (를) 찾을 수 없습니다."

이것은 간단해야하지만, 언제나처럼, Regex는 나를 바보로 느끼게합니다. 도움말 크게 감사하겠습니다.

답변

3

다음 패턴과 일치하는 시도 :

(?m)^(?![HD]0501).+(\r?\n)? 

과 빈 문자열로 대체합니다.

다음 데모 :

using System; 
using System.Text.RegularExpressions; 

namespace Test 
{ 
    class MainClass 
    { 
    public static void Main (string[] args) 
    { 
     string input = @"F00220034277909272011         
H001500020003000009272011        
D001500031034970000400500020000000025000000515000000000 
D001500001261770008003200010000000025000000132500000000 
H004200020001014209272011        
D004200005355800007702200005142000013420000000000000000 
D004200031137360000779000005000000012000000000000000000 
H050100180030263709272011        
D050100001876700006000300019500000025000000250000001500 
D050100001247060000071500030000000025000000280000000000 
D050100002075670000430400020000000025000000515000000000 
D050100008342500007702600005700000010000000000000000700 
D050100009460270000702100015205000025000000000000006205 
D050100008135120000702400015000000010000000000000001000 
D050100006938430000702200026700000010000000000000001000 
D050100006423710008000200025700000000000000000000001000 
D050100009488040008000600007175000000000000000000001000 
D050100001299190000800100016300000000000000000000003950 
D050100001244850000800400005407000000000000000000001607 
D050100001216280000840200020000000000000001000000006200 
D050100001216840000479000008175000000000000100000001000 
D050100001265880000410200014350000000000000100000001000 
D050100007402650002000300026700000000000000100000001000 
D050100001305150002000200016175000000000001000000000000 
D050100005435430000899700022350000000000001000000000000 
D050100031113850000500200008200000000250000100000001000"; 

     string regex = @"(?m)^(?![HD]0501).+(\r?\n)?"; 

     Console.WriteLine(Regex.Replace(input, regex, "")); 
    } 
    } 
} 

인쇄 :

H050100180030263709272011        
D050100001876700006000300019500000025000000250000001500 
D050100001247060000071500030000000025000000280000000000 
D050100002075670000430400020000000025000000515000000000 
D050100008342500007702600005700000010000000000000000700 
D050100009460270000702100015205000025000000000000006205 
D050100008135120000702400015000000010000000000000001000 
D050100006938430000702200026700000010000000000000001000 
D050100006423710008000200025700000000000000000000001000 
D050100009488040008000600007175000000000000000000001000 
D050100001299190000800100016300000000000000000000003950 
D050100001244850000800400005407000000000000000000001607 
D050100001216280000840200020000000000000001000000006200 
D050100001216840000479000008175000000000000100000001000 
D050100001265880000410200014350000000000000100000001000 
D050100007402650002000300026700000000000000100000001000 
D050100001305150002000200016175000000000001000000000000 
D050100005435430000899700022350000000000001000000000000 
D050100031113850000500200008200000000250000100000001000 

빠른 설명 :

  • (?m)
    • 는 멀티 라인 모드를 활성화,338을되도록은 새 줄의 시작과 일치합니다.
  • ^
    • 일치하는 새로운 라인의 시작;
  • (?![HD]0501)
    • 가 있는지 미리 봐 더"H0501" 또는 "D0501";
  • .+
    • 일치 하나 줄 바꿈 - 문자 이외의 많은 문자;
  • (\r?\n)?
    • 일치 옵션 줄 바꿈.
+0

그랬습니다. 감사! 내가 해낸 일을 알아 내야 만 할거야. –

+0

@ Jeremy, 패턴에 대한 간략한 설명도 추가했습니다. –