将richtextbox行划分为 - 将控制台应用程序分成Windows窗体

时间:2017-09-26 15:19:50

标签: c# regex forms richtextbox

我在控制台中创建了一个程序,它从每行中用“:”划分的文件中分割两个文本,并检查它们是否符合要求。文件中的每一行都有一个语法“xxxxx:xxxxx”

namespace ConsoleApp1  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            string textone, texttwo, filename;  
            Regex reg = new Regex("/W");//svi characteri osim A-Z,a-z,0-9  
            Regex numb = new Regex("[a-zA-Z]");  
            Regex numbek = new Regex("[0-9]");  
            Regex donjacrta = new Regex("_");  
            filename = Console.ReadLine();//should load richtextbox instead  
            string[] linije = System.IO.File.ReadAllLines(filename);  
            for (int i = 0; i < linije.Length; i++)    
            {  
                string trenutni = linije[i];  
                int indexx = trenutni.IndexOf(':');  
                textone = trenutni.Substring(0, indexx);  
                texttwo = trenutni.Substring((indexx + 1), (trenutni.Length) - (indexx + 1));  
                if (textone.Length < 3 || textone.Length > 25 || reg.IsMatch(textone) || donjacrta.IsMatch(textone) || !numb.IsMatch(textone) || !numbek.IsMatch(textone))  
                {  
                    continue;  
                }  
                else if (texttwo.Length < 3 || texttwo.Length > 30 )  
                {  
                    continue;  
                }  
                else  
                {  
                    Console.WriteLine(textone + ":" + texttwo);  
                }  
            }  
             }
                        }
                 }

(当我尝试在此处格式化代码时,会删除/隐藏部分代码,不知道原因)

在我的WindowsForms中,我首先将文件加载到RichTextBox中。从那里我需要以某种方式连接它并使其成为:

  1. 清除整个richtextbox并开始只键入有效行

  2. 删除无效行。

1 个答案:

答案 0 :(得分:0)

我花了一些时间来了解您尝试做什么以及您想要什么,但是,我认为我找到了您的解决方案。您几乎可以删除您编写的所有代码,并将其替换为单个正则表达式。

我相信你要做的事情:

  • 匹配按:拆分的字符串(即xxxxx:xxxxx - 其中x定义如下),每个字符串在文本文件中占用一行
  • 确保两个部分(冒号:之前和之后)仅匹配a-zA-Z0-9(没有其他字符)
  • 确保第一部分为3到25个字符
  • 确保第二部分为3到30个字符

代码

See this code in use here

^([a-zA-Z\d]{3,25}):([a-zA-Z\d]{3,30})$

对于示例C#程序,您可以使用以下内容。显然,您将替换逻辑以从文本文件而不是字符串中提取。

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"^([a-zA-Z\d]{3,25}):([a-zA-Z\d]{3,30})$";
        string input = @"xxxxx:xxxxx
1adfasfdfasdfsdfsfsfssfsd:1asfdsfsdfsafsdfsadfdfsdfadf2s
sfsd12321:12sfs3123
@342fdfasd:1dsadafdsfs";
        RegexOptions options = RegexOptions.Multiline;

        foreach (Match m in Regex.Matches(input, pattern, options))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
    }
}

结果

输入

xxxxx:xxxxx
1adfasfdfasdfsdfsfsfssfsd:1asfdsfsdfsafsdfsadfdfsdfadf2s
sfsd12321:12sfs3123
@342fdfasd:1dsadafdsfs

输出

以下是匹配的字符串。每个字符串

  • 完全匹配:xxxxx:xxxxx
    • 第1组:xxxxx
    • 第2组:xxxxx
  • 完全匹配:1adfasfdfasdfsdfsfsfssfsd:1asfdsfsdfsafsdfsadfdfsdfadf2s
    • 第1组:1adfasfdfasdfsdfsfsfssfsd
    • 第2组:1asfdsfsdfsafsdfsadfdfsdfadf2s
  • 完全匹配:sfsd12321:12sfs3123
    • 第1组:sfsd12321

      - 第2组:12sfs3123

说明

  • 在行首处断言位置
  • 匹配并捕获到第1组:集a-zA-Z\d中的任何字符在3到25次之间
  • 匹配冒号:
  • 匹配并捕获到第2组:集a-zA-Z\d中任意字符3到30次
  • 在行尾的断言位置