从单词中间的索引中查找字符串中单词的开头

时间:2013-12-18 03:59:50

标签: regex vb.net

所以我有一个整数列表,它们是我想要选择的单词内部字符的索引。我的列表是selMid我想要做的是找到单词的第一个字母的索引,然后是最后一个字母,这样我就可以得到长度< / strong>这个词。例如,假设我双击一个单词,它只突出显示单词,这是我想要实现的类似功能。现在我所拥有的代码有效,但只有当单词以(开头时才有效。我需要它可能与所有特殊字符一起工作。我正在考虑使用正则表达式,但是我在实现它时遇到了麻烦,我已经注释掉的匹配模式我觉得可行,但我无法弄清楚如何从字符串中的索引位置开始查找。

Public loopChar As Char
Public loopCharIndex As Integer
Public successBool As Boolean

Public Function indexSelection()
       For Each item In selMid
        Do
            'Dim pattern As String = "\b"
            'Dim m As Match = Regex.Match(RichTextBox1.Text.ToString, pattern, RegexOptions.RightToLeft)
            loopChar = GetChar(RichTextBox1.Text.ToString, item + 1)
            Console.Write(loopChar)
            loopCharIndex = item + 1
            item = item - 1
        Loop Until (Asc(loopChar) = 40)
        'If m.Success Then
        'Console.WriteLine("Found '{0}' at position {1} {2}.", m.Value, m.Index, m.Value.ToString.Count)
        'successBool = True
        'End If
        'Loop Until (successBool)

        Console.WriteLine(loopCharIndex)
    Next
    End Function

希望我的问题有道理,

谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

你可以通过使用Regular Expressions在字符串中向后和向前查找单词边界来做到这一点(并且我会自由地承认它可能不是最好的方法)。

尝试这样的事情:

Dim reF As Regex = New Regex("(.*?)\b")
Dim reB As Regex = New Regex("(.*?)\b", RegexOptions.RightToLeft)
Dim word as String = String.Empty

If reB.IsMatch(RichTextBox1.Text, selMid - 1) Then
    word = reB.Match(RichTextBox1.Text, selMid - 1).Groups(1).Value
End If

If reF.IsMatch(RichTextBox1.Text, selMid) Then
    word &= reF.Match(RichTextBox1.Text, selMid).Groups(1).Value
End If

所以,基本上这开始从selMid值后面的一个字符开始搜索,从右到左看(在字符串中向后匹配),然后从selMid开始搜索相反的方式(确保两个搜索不重叠)。以非贪婪的方式将任何字符匹配到单词边界,它应该只找到selMid所在的单词。