尝试找到最有效的方法,并且想知道在这种情况下正则表达式是否有用。
我循环遍历一个字符串数组,直到找到一个以或包含以下模式的字符串: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以外的数字。
答案 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