string result = "[数字]字符\r\n[数字]字符[n]n";
 n无限大 当然用户不可能输入很多的,怎么匹配输入的字符串是否合法,\r\n是控件取出值的换行符,可以根据\r\n spilt数组

解决方案 »

  1.   

    是要\[\d+\]\w+[\r\n]+\[\d+\]\w\[\d+\]\d+?还是要\[\d+\]\w+([\r\n]+\[\d+\]\w)*?
      

  2.   

    刚看完楼上的火贴,真的火了、study。
      

  3.   

    [1]手机\r[2]电脑\r[3]母婴用品 ...合法
    [a]手机\r[2]电脑\r[3]母婴用品...不合法
    手机\r[2]电脑\r[3]母婴用品....不合法正确格式 必须是[]里面是数字 必须有[]  
    可以split  string[]  arr=new string{"[1]手机","[2]电脑","[3]母婴用品"} 
    然后循环集合 一项 一项匹配 
      

  4.   

    Try this
     string result = "[1]手机\r[2]电脑\r[3]母婴用品";
                string match_pattern = @"^((?<text>\[\d+?\][^\s\\]+)(\s|\r)*?)+$";
                Match m=Regex.Match(result,match_pattern);
                if (m.Success)//匹配成功
                {
                    string[] arr = m.Groups["text"].Captures.Cast<Capture>().Select(a => a.Value).ToArray();
                    /*
                     *  [0] "[1]手机" string
                    [1] "[2]电脑" string
                    [2] "[3]母婴用品" string                 */
                }
      

  5.   


    匹配是OK的 就是少了如果\r在最前面的情况,还有个问题 我现在要提取中括号中的数字 放在一个 int list 中 有正则的好方法吗? 
      

  6.   

    string result = "\r[1]手机\r[2]电脑\r[3]母婴用品";
                    string match_pattern = @"^((\s|\r)*?(?<text>\[(?<value>\d+?)\][^\s\\]+)(\s|\r)*?)+$";
                    Match m = Regex.Match(result, match_pattern);
                    if (m.Success)//匹配成功
                    {
                        string[] arr = m.Groups["text"].Captures.Cast<Capture>().Select(a => a.Value).ToArray();
                        /*
                         *         [0]    "[1]手机"    string
                                [1]    "[2]电脑"    string
                                [2]    "[3]母婴用品"    string                     */
                        List<int> _list = m.Groups["value"].Captures.Cast<Capture>().Select(a => int.Parse(a.Value)).ToList();
                        /*
                         *  [0] 1 int
                        [1] 2 int
                        [2] 3 int                     */
                    }