使用Regex从数组中提取大量字符串

时间:2015-01-12 19:41:39

标签: arrays regex vb.net

尝试找到最有效的方法,并且想知道在这种情况下正则表达式是否有用。

我循环遍历一个字符串数组,直到找到一个以或包含以下模式的字符串:abc 1234.到目前为止,我处理了2种格式 - 一个空格和一个空格。虽然在某些情况下可能会有更多的空白区域。

然后我进入while循环,循环并处理每一行,直到它找到另一个模式,也以“abc”开头,但后跟一个1234以外的数字。

If MyArray(i).ToString(0.ToLower().StartsWith("abc 1234") or If MyArray(i).ToString(0.ToLower().StartsWith("abc  1234")

    While Not MyArray(i).ToString().ToLower().StartsWith("abc")

        ''process line here

            i+=1
        End while
end if

问题是数组包含一堆用“abc 1234”盯着的线,所以我永远不知道什么时候退出,直到我遇到另一个“abc”模式但是有不同的数字。如果遇到另一个“abc 1234”模式,我不想退出while循环,因此在while循环条件下使用“abc”是不够的

有人可以帮忙吗?

我想在我的while循环条件中使用一个函数,即

Function CheckForEnd(ByVal input As String, ByVal pattern As String) As Boolean
     Dim result As Boolean = False
     If Regex.Split(pattern, "[ ]{1,}").Length = 2 Then
        If Regex.Split(input, "[ ]{1,}").Length > 2 Then
            If Regex.Split(input, "[ ]{1,}")(0).Trim().Equals(Regex.Split(pattern, "[ ]{1,}")(0).Trim()) Then
                If Regex.Split(input, "[ ]{1,}")(1).Trim().Equals(Regex.Split(pattern, "[ ]{1,}")(1).Trim()) Then
                    result = True
                End If
            End If
        End If
    End If

    Return result
End Function

所以我的while循环看起来像这样:

While Not CheckForEnd(MyArray(I),"abc 1234")
    ''my code here

   I+=1
End While

但我不确定这是否是最有效的方法。请建议

以下是一个例子:

“这是一个测试字符串。”

“这是另一个测试字符串”

“abc 1234(100-00)”

“这是另一句话”

“这是一系列数字:34566900”

“abc 1234(300-01)”

“更多无关的东西......”

“abc 7890(500-01)测试”

“更多东西......”

“另一个字符串”

因此,如果上面是我的字符串数组(要清楚,每行是一个单独的数组下标),那么我需要提取以下部分:

“abc 1234(100-00)”

“这是另一句话”

“这是一系列数字:34566900”

“abc 1234(300-01)”

“更多无关的东西......”

所以我在遇到第一个abc 123之后循环浏览它,该函数帮我检查每一行是否出现下一个abc,后跟1234以外的数字。

1 个答案:

答案 0 :(得分:-1)

如果CheckForEnd以外的其他组合与True一起使用,则下面的代码1234会返回abc

正则表达式需要访问RegularExpressions命名空间,因此您还必须执行Imports System.Text.RegularExpressions

Sub exampleSubroutine()
    [.declare MyArray here.]
    Dim i As Integer = 0

    While Not CheckForEnd(MyArray(i))
        i += 1
        If (MyArray.Count() = i) Then 'Stop a crash if we reach the end of the array.
            Exit While
        End If
    End While

    ProcessMatch(MyArray(i))

End Sub

Sub ProcessMatch(ByVal match As String)
    [.process matched line here.]
End Sub

Function CheckForEnd(ByVal input As String) As Boolean
    Dim re1 As String = "(.*?)^((?!abc 1234).)*$(.*?)"

    Dim r As Regex = New Regex(re1, RegexOptions.IgnoreCase Or RegexOptions.Singleline)
    Dim m As Match = r.Match(input)
    If (m.Success) Then
        Dim word1 = m.Groups(1)
        Dim ws1 = m.Groups(2)
        Dim d1 = m.Groups(3)
        Return True
    End If
    Return False
End Function