У меня есть алгоритм выделения, который берет строку и добавляет коды подсветки вокруг совпадений в ней. Проблема, с которой я сталкиваюсь, - это слова типа «Найти tæst» в качестве искомой строки и «taest» в качестве строки для поиска. Поскольку длина строки поиска не соответствует длине совпадения, я не могу точно найти конец совпадения. IndexOf в моем случае показывает мне совпадение, но поскольку комбинированный æ засчитывается как один символ, он отбрасывает мое обнаружение конца матча. Я не думаю, что IndexOf будет работать для меня здесь. Будет работать то, что возвращает индекс совпадения и длину совпадения. Но я не знаю, что еще использовать.Алгоритм выделения - когда длина совпадения не равна длине строки поиска
' cycle through search words and replace them in the text
For intWord = LBound(m_arrSearchWords) To UBound(m_arrSearchWords)
If m_arrSearchWords(intWord).Length > 0 Then
' replace instances of the word with the word surrounded by bold codes
' find starting position
intPos = strText.IndexOf(m_arrSearchWords(intWord), System.StringComparison.CurrentCultureIgnoreCase)
Do While intPos <> -1
strText = strText.Substring(0, (intPos - 1) - 0 + 1) & cstrHighlightCodeOn & strText.Substring(intPos, m_arrSearchWords(intWord).Length) & cstrHighlightCodeOff & strText.Substring(intPos + m_arrSearchWords(intWord).Length)
intPos = strText.IndexOf(m_arrSearchWords(intWord), intPos + m_arrSearchWords(intWord).Length + cstrHighlightCodeOn.Length + cstrHighlightCodeOff.Length, System.StringComparison.CurrentCultureIgnoreCase)
Loop
End If
Next intWord
Метод подстроки не работает, поскольку длина находится за пределами строки. Я помещаю исправление для строк, которые заканчиваются поисковым термином (не показано выше). Но более длинные строки будут подсвечены неправильно, и мне нужно их исправить.
Я также попытался Regex.Match с RegexOptions.CultureInvariant + RegexOptions.IgnoreCase но это, кажется, не совпадают на данном примере. –