我需要创建一个winform颜色表达式,以用户在文本框中编写的'@'开头(可以是richTextBox或某些Infragistics工具,并不重要,只需要工作)。
例如:
没有@expression nothingelse
@exression 必须是彩色的
我试图通过空格将字符串从文本框中拆分以识别单词,但我无法正确地替换它。现在我正在学习正则表达式并试图将它应用到我的问题中。
我在2017年的Visual Studio社区中使用C#。
修改
我从here更改了一些代码,试图让它适应我的问题。但限制器不能正常工作。我相信它正在发生,因为选择从'@'开始,但在此之前可能有一个空格,所以代码不起作用。
以下是我正在使用的代码:
parallel
答案 0 :(得分:0)
你需要像这样使用正则表达式:
foreach (string result in Regex.Split(TextBox1, @" @\w+"))
{
//do stuff...
}
答案 1 :(得分:0)
我得到了我希望的结果,但是有一点问题。如果我用BackSpace擦除某些内容,背景颜色会开始突出显示所有内容。
我相信这是SelectionBackColor的一部分,因为当我使用SelectionColor时它不会发生。
代码:
private void FindAt() //acha arrobas
{
for(int r = 0; r <= tam; r++)
{
for(int z = 0; z < (tam - r); z++)
{
if (z > 8) break;
String temp = text.Substring(r, z);
char aux = '\0';
if (lista.FindStringExact(temp) != -1)
{
if (tam > r + z) aux = text.ElementAt(r + z);
if ((r > 0 && text.ElementAt(r - 1) == '@') && aux == ' ')
{
atIndex[0, ctrlAt] = r-1; //salva posição inicial da variavel, incluindo o @ (por isso o -1)
atIndex[1, ctrlAt] = z + 1; //salva comprimento da variavel, + 1 por causa do @ (segundo argumento da substring)
ctrlAt++;
}
}
}
}
}
以及为子字符串着色的函数:
private void ColorAt() //colore variaveis
{
for (int a = 0; a < ctrlAt; a++)
{
if (atIndex[0, a] != -1)
{
richTextBox1.Select(atIndex[0, a], atIndex[1, a]);
richTextBox1.SelectionBackColor = Color.Green;
}
else richTextBox1.SelectionBackColor = Color.Empty;
}
}