2013-07-10 3 views
0

그래서 여러 "꼬리말"이있는 파일을 파싱하려고합니다 (이 파일은 회사에서 전자적으로 저장하려고하는 출력용으로 설계된 출력입니다 ... 각 꼬리말 새 페이지이고 새 페이지는 더 이상 필요하지 않습니다.정규식 일치 및 문자열 삭제/바꾸기

(1) 2122 인쇄 된 2013년 7월 1일 4시 46분 페이지 : 1 PRINTED 2013년 7월 1일 04 2122의 2 (11)의 난을 찾아서 같이 줄을 제거하려고

: 46 페이지 : 2의 11 3 2122 인쇄 된 2013년 7월 1일 4시 46분 페이지 :

에 그때 "같은 것을 읽을 것이다 마지막 줄을 (교체하려면 3 (11) 2122 of 2122 ")와"사용자 정의 "꼬리말.

RegEx를 사용하고 있지만 사용법이 매우 새롭기 때문에 RegEx를 어떻게 처리해야합니까? RegEx "count"함수를 사용하여 마지막 줄을 찾은 다음 해당 줄을 .replace로 할 계획입니다.

저는 VB .NET을 사용하고 있지만 필요한 경우 C#을 번역 할 수 있습니다. 내가하고 싶은 것을 어떻게 성취 할 수 있습니까? 특히 난 단지/일치 일치> 1.

+1

당신이 지금까지해온 것을 보여 주어서 당신이 이미 그것에 끼워 넣었던 노력과 당신이 갇혀있는 곳을 볼 수 있습니다. – Dan

+0

바닥 글 자체 줄에 바닥 글이 있습니까? 그건 올바른 Regex 도움이 될 수 있습니다. 각 일치 항목을 제거 할 때'regex.replace'를 수행하고 일치 항목을 빈 문자열로 바꿀 수 있습니다 ... 데이터를 더 게시하면 도움을 드릴 수 있습니다 .... –

+0

@JohnBustos 예. 형식을 표시했지만 페이지 수는 변경 될 수 있으며 전체 파일의 다른 위치에있을 수 있습니다. 이러한 파일은 전자 형식으로 저장되지 않고 인쇄되도록 설계되었습니다. 그래서 그들은 footer formatting 이전에 삭제 된 많은 프린터 제어 문자를 포함합니다. – mlw4428

답변

0

Here's one의 #으로 너무 오래 일치의 제거에 대한 관심이 나는 RegExr로 만든 :

그것은 일치
/^(\d+\s+of\s+\d+)(?=\s+printed)/gim 

(수) (공간) ('의') (공백) (숫자)와 공백이 뒤 (공백) ('printed') 경우에만 대문자와 소문자를 구분합니다./m 플래그는^및 $를 행 인식 경계로 바꿉니다.

이 내가 그 일을 결국 어떻게
0

...

Private Function FixFooters(ByVal fileInput As String, Optional ByVal numberToLeaveAlone As Integer = 1) As String 
    Dim matchpattern As String = "^\d+\W+of\W+\d+\W+PRINTED.*$" 
    Dim myRegEx As New Regex(matchpattern, RegexOptions.IgnoreCase Or RegexOptions.Multiline) 
    Dim replacementstring As String = String.Empty 
    Dim matchCounter As Integer = myRegEx.Matches(fileInput).Count 
    If numberToLeaveAlone > matchCounter Then numberToLeaveAlone = matchCounter 
    Return myRegEx.Replace(fileInput, replacementstring, matchCounter - numberToLeaveAlone, 0) 
End Function 

은 내가 inital matchpattern를 얻을 수 myregextester.com을 사용했다. 마지막 바닥 글을 홀로 남기고 싶었 기 때문에 (나중에 더 조작하기 위해) 모든 변수를 제거하지 않도록 numberToLeaveAlone 변수를 만들었습니다. 이 프로그램의 목적을 위해 나는 디폴트 값 1을 만들었지 만 그것은 0으로 바뀔 수있다. (나는 항상 하나를 남기고 싶어한다는 것을 알고 있기 때문에 호출 코드에서 가독성을 위해 그것을했다. 그러나 재사용하고 싶다. 암호). 그것은 상당히 빠르며, 거기에 더 좋은 방법이있을 것이라고 확신합니다.하지만이 점이 나에게 가장 의미가 있습니다.