【发布时间】:2011-05-20 23:01:01
【问题描述】:
我正在使用 ScintillaNet,它是我的 C# 应用程序中 Scintilla 控件的包装器。我正在动态添加以 : 结尾的所有单词(从现在开始我们就调用这个关键字)。我通过使用正则表达式来做到这一点,每次用户按下冒号键时,用空格分隔的关键字字符串。这是我的代码(在 CharAdded 事件中):
if (e.Ch == ':')
{
string wp = string.Empty;
Regex r = new Regex(@"\b\w+[:\b]");
MatchCollection m = r.Matches(Scintilla.Text);
for (int i = 0; i < m.Count; i++)
{
wp += " " + m[i].Value.Substring(0, m[i].Value.Length - 1); // Remove the colon
}
wp = wp.ToLower();
Scintilla.Lexing.Keywords[3] = wp;
}
现在的问题是,每次输入新关键字并且用户按下冒号时,它不仅会突出显示关键字,还会不必要地再次突出显示文档中的每个关键字。因此,尽管我的编码有效,但它的编码非常糟糕,我想知道如何通过仅突出显示最后输入的关键字来使我的代码更快。任何帮助和/或想法将不胜感激。
【问题讨论】:
-
这不能回答问题,但您应该从字符类中删除
\b。首先,它在这种情况下并不意味着“单词边界”,其次,\b在冒号之后无论如何都不会匹配,除非后面的字符是字母数字。只需使用\b\w+:。
标签: c# regex search syntax highlighting