2013-07-10 149 views
0

所以我試圖解析通過一個文件,它有多個「頁腳」(該文件是爲打印設計的輸出,我的公司希望保存電子存儲...每個頁腳是一個新頁面,新頁面不再需要)。正則表達式匹配和刪除/替換字符串

我試圖查找並刪除,看起來像行:

1 2122印製04:46頁2013年7月1日:1印製2013年7月1日04 11 2122 2: 46頁:2的11 3的2122打印頁2013年7月1日04:46:3的11

我再要替換最後一行(其內容類似於「 2122年的2122「)與」自定義「頁腳。

我正在使用正則表達式,但是對於使用正則表達式非常新,所以我的正則表達式應如何實現?我計劃使用RegEx「count」函數來找出何時找到最後一行,然後對其進行更換。

我使用VB .NET,但可以根據需要翻譯C#。我怎樣才能完成我期待的目標?具體來說,我只關心匹配/這麼長的匹配的去除爲匹配> 1.

+1

向我們展示您迄今爲止所做的工作,以便我們看到您已付出的努力以及卡住的位置。 – Dan

+0

頁腳是否存在於自己的行上?這可以幫助正確的正則表達式。至於刪除每場比賽,你可以做一個'regex.replace'並用一個空字符串替換你的比賽......發佈更多的數據,我們可能會幫助...... –

+0

@JohnBus​​tos 是的,他們這樣做。我已經顯示了格式,但是頁面數量可能會發生變化,並且可能位於整個文件的不同位置。這些文件旨在打印,而不是以電子方式存儲。所以他們包含了很多打印機控制字符,這些字符在頁腳格式化之前被刪除。 – mlw4428

回答

0

Here's one的#我RegExr創建:

/^(\d+\s+of\s+\d+)(?=\s+printed)/gim 

它匹配(號碼)(空格)(「的」 )(空格)(數字),只有在後面加上(空格)('打印'),不區分大小寫。/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 

我用myregextester.com獲得inital matchpattern。由於我想單獨留下最後一個頁腳(稍後對其進行操作),我創建了numberToLeaveAlone變量以確保不會刪除所有變量。爲了這個程序的目的,我做了默認值1,但可以改爲零(我只是爲了在調用代碼中進行可讀性而做的,因爲我知道我總是想離開一個......但我喜歡重複使用碼)。這很快,我確信有更好的方法,但是這對我來說最有意義。