Skip to main content
 首页 » 编程设计

c# 根据正则表达式突出显示 rtb 文本颜色

2024年04月18日34haluo1

我对同时使用 rtb 和 regex 有疑问。

我有一个类似 vK-lKs-812349;jra_6993788428;Enx-2674@62 的文本

我的函数将按 deli'ter ';' 拆分数据并将每个部分与正则表达式模式匹配

  • 第一部分"^[a-zA-Z]{2}-[a-zA-Z]{3}-[0-9]{7}$"
  • 第二部分"^[a-zA-Z]{3}_[0-9]{10}$"
  • 第三部分"^[a-zA-Z]{3}-[0-9&~%@*^<>!#$]{7}$"

我想要的是我在 rtb 中有这些数据(所有行都有相似的数据,即相同的数据模式)。当我单击按钮时,函数应该获取光标所在的行,并且它应该与模式匹配,如果正则表达式不匹配,它应该更改文本特定部分的颜色。

示例:如果我在第 2 行并且第二部分数据是 'zza 6993788428' 那么因为缺少 _ 正则表达式将不匹配所以我希望 rtb 中的这部分应该获得红色。

您的帮助将不胜感激。谢谢...

请您参考如下方法:

试试这个

     if (!string.IsNullOrEmpty(richTextBox1.Text)) 
            { 
                int lineStart = 0; 
                foreach (string item in richTextBox1.Lines) 
                { 
                    List<string> lst = item.Split(new char[] { ';' }).ToList(); 
                    if (lst.Count == 3) 
                    { 
                        if (!Regex.IsMatch(lst[1], "^[a-zA-Z]{3}_[0-9]{10}$")) 
                        { 
                            int Start = richTextBox1.Find(item, lineStart, richTextBox1.TextLength, RichTextBoxFinds.WholeWord); 
                            int End = Start + item.Length; 
 
                            richTextBox1.Select(Start, End); 
                            richTextBox1.SelectionBackColor = Color.Red; 
                        } 
                        else 
                        { 
                            int Start = richTextBox1.Find(item, lineStart, richTextBox1.TextLength, RichTextBoxFinds.WholeWord); 
                            int End = Start + item.Length; 
 
                            richTextBox1.Select(Start, End); 
                            richTextBox1.SelectionBackColor = Color.Green; 
                        } 
                    } 
                    lineStart += item.Length; 
                } 
            }