检查行是否与正则表达式匹配

时间:2013-01-01 21:40:30

标签: regex vb.net io

我有一个由服务器生成的文件 - 我无法控制如何生成或格式化此文件。我需要检查每一行以一组设定长度开始(在本例中为21个数字字符)。如果一行与该条件不匹配,我需要将它连接到上一行,并在读取并更正整个文件后保存它。我正在为目录中的很多文件执行此操作。

到目前为止,我有:

       Dim rgx As New Regex("^[0-9]{21}$")

        Dim linesList As New List(Of String)(File.ReadAllLines(finfo.FullName))

        If linesList(0).Contains("BlackBerry Messenger") Then
            linesList.RemoveAt(0)
            For i As Integer = 0 To linesList.Count
                  If Not rgx.IsMatch(i.ToString) Then
                        linesList.Concat(linesList(i-1))
                 End If

            Next
        End If
        File.WriteAllLines(finfo.FullName, linesList.ToArray())[code]

在该代码块之前和之后有一个for语句循环遍历源目录中的所有文件,这很好。

希望这不是一件坏事:/

1 个答案:

答案 0 :(得分:0)

我认为你的解决方案没有任何好处,你没有连接线路。这是一种不同的方法:

Dim rgx As New Regex("^[0-9]{21}")
Dim linesList As New List(Of String)(File.ReadAllLines(finfo.FullName))

' We will create a new list to store the new lines data
Dim newLinesList As New List(Of String)()

If linesList(0).Contains("BlackBerry Messenger") Then
    Dim i As Integer = 1
    Dim newLine As String
    While i < linesList.Count
        newLine = linesList(i)
        i += 1

        ' Keep going until the "real" line is over
        While i < linesList.Count AndAlso Not rgx.IsMatch(linesList(i))
            newLine += linesList(i)
            i += 1
        End While

        newLinesList.Add(newLine)
    End While
End If

File.WriteAllLines(finfo.FullName, newLinesList.ToArray())