gpt4 book ai didi

c# - 在 richtextbox 中突出显示单词

转载 作者:太空宇宙 更新时间:2023-11-03 15:31:50 25 4
gpt4 key购买 nike

我想知道如何突出显示富文本框中的多个单词,例如

我搜索的词是“la”在文本“la langue”中;

我这里有这段代码

private void Surligne(string[] mots)
{
foreach (string word in mots)
{
int Index = 0;
while (Index < rtb.TextLength)
{
int wordStartIndex = rtb.Find(word, Index, RichTextBoxFinds.None);
if (wordStartIndex != -1)
{
rtb.SelectionStart = wordStartIndex;
rtb.SelectionLength = word.Length;
rtb.SelectionBackColor = Color.Yellow;
}
else
break;
Index += wordStartIndex + word.Length;
}
}
}

但它突出了 la 'la'ngue

我只希望它突出显示 la 而不是“la”langue。

如何更改我的代码来执行此操作?谢谢。

最佳答案

扩展@sab669 的评论,这些是代码中建议的 2 种方式。确切的结果将取决于您定义单词的准确程度(数字可以是单词的一部分吗?下划线等连接符怎么样?),但在大多数情况下,它们应该是一样的。

<强>1。检查相邻字符

这只需要修改您的 while 循环。您必须检查相邻的字符,记住您可能位于字符串的开头或结尾:

while (Index < rtb.TextLength)
{
int wordStartIndex = rtb.Find(word, Index, System.Windows.Forms.RichTextBoxFinds.None);
if (wordStartIndex == -1)
break;
if ((wordStartIndex == 0 || !char.IsLetterOrDigit(rtb.Text[wordStartIndex - 1])) &&
(wordStartIndex + word.Length >= rtb.TextLength || !char.IsLetterOrDigit(rtb.Text[wordStartIndex + word.Length])))
{
rtb.SelectionStart = wordStartIndex;
rtb.SelectionLength = word.Length;
rtb.SelectionBackColor = System.Drawing.Color.Yellow;
}
Index += wordStartIndex + word.Length;
}

<强>2。使用正则表达式

这导致代码更短,幸运的是正则表达式并不那么困难:

foreach (Match match in Regex.Matches(rtb.Text, "\\b" + word + "\\b"))
{
rtb.SelectionStart = match.Index;
rtb.SelectionLength = word.Length;
rtb.SelectionBackColor = System.Drawing.Color.Yellow;
}

我使用了\b,它表示单词字符和非单词字符之间的边界。有关更多信息,您可以查看 MSDN page ,其中还将包含有关这些字符到底是什么的信息。

关于c# - 在 richtextbox 中突出显示单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33507260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com