搜索字符串的位置

时间:2013-06-07 16:31:19

标签: vb.net string textbox

我正在使用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但没有正确的结果...

3 个答案:

答案 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:

  1. 请务必在代码顶部使用Imports System.Text.RegularExpressions
  2. 这假设TextBox6.Text中没有任何特殊字符(可能需要在模式中转义)

答案 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和类似的....并有不同的输出。点正在阅读返回匹配的索引。