我正在使用VB 2010,我有一个小问题。我需要一个特殊的搜索功能,我的RichTextBox。
我的RichTextBox1中有一个非常长的字符串。我在那里搜索了一个特定的值:
Dim firstposition As String = CStr(CDbl(TextBox6.Text) * 8 - 7)
Dim valueofadress = Mid(RichTextBox3.Text, CInt(firstposition), 8)
TextBox5.Text = valueofadress
Dim regi1 = Mid(RichTextBox3.Text, 1, CInt(CDbl(TextBox6.Text) * 8))
Dim t = Split(regi1, tempcode)
Dim result = UBound(t)
TextBox4.Text = result.ToString
TextBox7.Text = regi1.ToString
这不是问题所在。我有第二个RichTextBox,其中包含相似的字符串。现在我想在这个rtb中搜索一个超过10000次的字符串。我想找出那个字符串的位置。我还有一个计数器,它给出了我正在搜索的位置的字符串数。
这是我的柜台:
Dim regi1 = Mid(RichTextBox3.Text, 1, CInt(CDbl(TextBox6.Text) * 8))
Dim t = Split(regi1, tempcode)
Dim result = UBound(t)
TextBox4.Text = result.ToString
示例:
如果counter = 4并且我想搜索存在10次的字符串“Hello world”,那么我想要在RichTextBox中第4个“Hello world”的位置。好吧,我已经尝试过InStr和IndexOf但没有正确的结果...
答案 0 :(得分:0)
你可以尝试String.IndexOf的一个重载,它允许你指定搜索的起始位置:
Dim lastFindIndex As Integer = 0
Dim stringToFind As String = "Find me!"
Dim currentNumberOfMatches = 0
Dim matchToStopAt As Integer = 4
While lastFindIndex > -1
currentNumberOfMatches += 1
If matchToStopAt = currentNumberOfMatches Then
Exit While
End If
lastFindIndex = MyTextBox.Text.IndexOf(stringToFind, lastFindIndex)
End While
当循环退出时,您知道找到字符串的位置(lastFindIndex
),然后您可以将其输入到其他逻辑中。
答案 1 :(得分:0)
我不确定我是否完全理解你的问题,但我认为你最好不要使用正则表达式来做这件事。
有些事情:
Dim pattern As String = TextBox6.Text
Dim m As MatchCollection = Regex.Matches(RichTextBox3.Text, pattern)
现在您可以遍历您的matchcollection - 每个匹配的位置可以通过m([]).Index
找到。因此,例如,您想要找到匹配的第4个匹配项,您可以使用m(3).index
。
希望这有帮助。
PS:
Imports System.Text.RegularExpressions
。答案 2 :(得分:0)
我还建议在这里使用正则表达式。我会选择\ b字边界和简单的功能:
Public Function SearchForGivenString(text As String, pattern As String, Optional position As Integer = 1) As Match
Dim found As MatchCollection = Regex.Matches(text, "\b" & pattern & "\b")
Dim returnMe As Match
If found.Count = 0 Then
Return returnMe
ElseIf position > found.Count Then
Return found(found.Count - 1)
Else
Return found(position - 1)
End If
End Function
然后你可以用这样的东西:
Dim testString As String = "Something really long as a text string. Something really long as a text string. Something really long as a text string. Something really long as a text string. Something really long as a text string. Something really long as a text string. Something really long as a text string."
Dim returnMatch As Match = SearchForGivenString(testString, "really", 7)
If Not IsNothing(returnMatch) Then
Console.WriteLine(returnMatch.Value & " " & returnMatch.Index)
End If
Console.ReadLine()
当然你可以发送Textbox4.Text和类似的....并有不同的输出。点正在阅读返回匹配的索引。