正则表达式匹配和删除/替换字符串

时间:2013-07-10 20:40:33

标签: regex vb.net

所以我试图解析一个有多个“页脚”的文件(该文件是一个专为打印而设计的输出,我的公司希望以电子方式存储...每个页脚是一个新页面和新页面不再需要as)。

我正在寻找并删除看起来像这样的行:

1 of 2122 PRINTED 07/01/2013 04:46 Page:1 of 11 2 of 2122 PRINTED 07/01/2013 04:46页:2的11 3 of 2122已打印07/01/2013 04:46页:3/13

等等

然后我想用“自定义”页脚替换最后一行(这将读取“2122 of 2122”之类的内容)。

我正在使用RegEx,但是我很擅长使用它,所以我的RegEx应该如何实现呢?我打算使用RegEx“count”函数找出我找到最后一行的时间,然后在其上做一个.replace。

我使用的是VB .NET,但如果需要可以翻译C#。我怎样才能完成我想做的事情?具体来说,我只关心匹配/删除匹配,只要#匹配> 1。

2 个答案:

答案 0 :(得分:0)

Here's one我使用RegExr创建:

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

它匹配行的开头的(数字)(空格)('of')(空格)(数字),并且只有后跟(空格)('打印'),不区分大小写。 / m标志将^和$转换为行识别边界。

答案 1 :(得分: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来获得初始匹配模式。由于我想单独保留最后一个页脚(稍后再操作它),我创建了numberToLeaveAlone变量以确保我们不删除所有变量。出于这个程序的目的,我将默认值设为1,但是可以将其更改为零(我只是为了在调用代码中的可读性而这样做,因为我知道我总是希望留下一个...但我确实希望重用码)。它相当快,我确信有更好的方法,但这个对我来说最有意义。