有一个字符串,如aaa      varchar(10),
现在想定义三个string分别存储上面的信息:
a="aaa";
b="varchar";
c="10";请问如何能实现该结果,并且什么样的解决思路比较好?注:aaa和varchar之间 可能是空格 也有可能是\t.谢谢 
在线等。

解决方案 »

  1.   


                List<string> list = new List<string>() { "aaa varchar(10)", "bbb int" };
                string a = string.Empty;
                string b = string.Empty;
                string c = string.Empty;
                Regex reg = new Regex(@"(?s)([^\s]+)\s*([^\s\(]+)(?:\(([^\)]+)\))?");
                foreach (string s in list)
                {
                    Match m = reg.Match(s);
                    a = m.Groups[1].Value;
                    b = m.Groups[2].Value;
                    c = m.Groups[3].Value;
                    Console.WriteLine("{0} {1} {2}", a, b, c);
                }
                Console.ReadLine();
    /*
    aaa varchar 10
    bbb int
    */
      

  2.   

    仅以匹配"aaa varchar(10)"这样的文本为精度,则下面色块就是要捕获的组和文本的对应关系。
    ^(\w+)\s+(varchar)\s*(\(\d+\))$
     aaa     varchar  (10)示例代码如下:
    string source = @"aaa varchar(10)";
    Regex reg = new Regex(@"^(\w+)\s+(varchar)\s*(\(\d+\))$");
    Match match = reg.Match(source);// 从第2个g开始,即m.Group[1]开始,就分别对应上面提到的几段
    foreach (var g in match.Groups)
    {
        Console.WriteLine(g);
    }
    结果:
    aaa varchar(10)
    aaa
    varchar
    (10)