2016-06-10 5 views
1

rtb와 regex를 함께 사용하는 데 질문이 있습니다.C# 정규 표현식을 기반으로 rtb 텍스트 색상을 강조 표시합니다.

내가 가진 vK-lKs-812349;jra_6993788428;[email protected] 같은 텍스트

deli'ter하여 데이터를 분할합니다 내 기능 ';' 정규식 패턴

  • 3 파트 2 부분 "^[a-zA-Z]{3}_[0-9]{10}$"
  • 에 대한 첫 번째 부분 "^[a-zA-Z]{2}-[a-zA-Z]{3}-[0-9]{7}$"
  • 에 대한 각 부분 일치 "^[a-zA-Z]{3}-[0-9&~%@*^<>!#$]{7}$"

나는 (RTB에 라인이 데이터를 가지고 있습니다 원하는 것은 모든 라인은 유사한 데이터 즉, 동일한 데이터 패턴을 가짐). 버튼 기능을 클릭하면 커서가있는 줄을 가져와 패턴과 일치해야하며 정규식이 맞지 않으면 해당 텍스트의 특정 부분의 색상이 변경됩니다.

: 나는 2 호선에있어 거기 그대로 2 부분 데이터는 'zza 6993788428'이면 _ 정규식 누락하는 것은 그래서는 RTB에서이 부분은 색상이 빨간색 얻을 것을 원하는 일치하지 않습니다 .

귀하의 도움에 감사드립니다. 덕분에 ...

+0

Thx for edit @ user861594 – Roshan

답변

1

 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; 
       } 
      } 
+0

안녕하세요, 제 질문은 정규식 패턴과 관련이 없습니다. Plzz 질문을 확인하십시오. 정규식 패턴이 텍스트와 일치하지 않는다면 'jra 6993788428'전경색이 응용 프로그램 C# – Roshan

+0

에있는 rtb의 빨간색으로 변경되어야합니다. 이제 확인하고 알려주세요. – King

+0

관심있는 Thx지만 내 커서가있는 줄에서 작동하는 기능을 원합니다. 나는 내 자신의 대답을 발견했다. 하지만 내 코드에 약간의 개선이 필요하다. 찾기 및 바꾸기가 특정 행에서 일어나야합니다. – Roshan

1

내가 나 자신에 의해이 질문에 대한 코드를 찾아보십시오. 나는 rtb에서 라인을 가져 와서 글로벌 변수에 넣는 타이머를 만들었다.

  timer1.Start(); 
     timer1.Tick += new EventHandler(LineEvent); 

및 글로벌 변수 및 이벤트

 public static class foo 
    { 
     public static int lineno; 
    } 

     private void LineEvent(object sender, EventArgs eArgs) 
    { 
     int IndexCoun = rtb1.SelectionStart;//Index count where actually the mouse is clicked in the richtextbox 
     foo.lineno = rtb1.GetLineFromCharIndex(IndexCoun);//Get the line no 
    } 

하고 기능과 일치하고, RTB가

 private void RegexCla(string value, string pattern, string data) 
    { 
     if(Regex.IsMatch(value, pattern) == true) 
     { 
      int index = 0; 
      for (int i = 0; i < foo.lineno; i++) 
      { 
       int gelen = rtb1.Lines[i].Length; 
       index = index + gelen; 
      } 
      rtb1.Find(data, index, RichTextBoxFinds.WholeWord); 
      rtb1.SelectionColor = Color.Green; 
      rtb1.SelectedText = value; 
     } 
     else 
     { 
      int index = 0; 
      for (int i = 0; i < foo.lineno; i++) 
      { 
       int gelen = rtb1.Lines[i].Length; 
       index = index + gelen; 
      } 
      rtb1.Find(data, index, RichTextBoxFinds.WholeWord); 
      rtb1.SelectionColor = Color.Red; 
     } 
    } 

입니다 그리고 마지막으로 버튼 클릭이

인 변화의 주요 기능
 private void RegBtn_Click(object sender, EventArgs e) 
    { 
     string[] rtblines = rtb1.Lines; 
     var reqtext = rtblines[foo.lineno]; 
     string[] reclis = reqtext.Split(';'); 
     RegexCla(reclis[0].Replace(" ", ""), "^[a-zA-Z]{2}-[a-zA-Z]{3}-[0-9]{7}$", reclis[0]); 
    } 

모든 지원에 감사드립니다.

1
private void Findword(string FindText, RichTextBox rt) 
    { 
     try 
     { 
      List<int> lst = new List<int>(); 
      bool IsRun = true; 
      int Index = 0; 
      int count =0; 

      lst.Add(-1); 
      lst.Add(0); 
      lst.Add(rt.TextLength); 
      while (IsRun) 
      { 
       Index = rt.Find(FindText, Index, RichTextBoxFinds.WholeWord); 
       if (lst.Contains(Index)) 
        break; 
       else 
        count++; 
       lst.Add(Index); 
       Index += FindText.Length; 
      } 

      MessageBox.Show(FindText + " Count: " + count); 
     } 
     catch { } 
    } 
+0

고마워요. 모든 지원에 감사드립니다. 대답을 선택하고^나를 원한다면 나. 감사 – Roshan