所以我有一个整数列表,它们是我想要选择的单词内部字符的索引。我的列表是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
希望我的问题有道理,
谢谢你的帮助
答案 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
所在的单词。