文本格式:Welch Allyn SureSigtR 8  S+1.50  C-0.50 A142
L 9  S+1.75  C-0.50 A161Name:刘小明Date:2010-05-01 19:00:001请问各位如何得到
R=8,RS=1.50,RS=-0.50,RA=142;
L=9,LS=1.75,C=-0.50 LA=161;
Name=刘小明 Date=2010-05-01

解决方案 »

  1.   

    一次正则完不成。。直接替换吧。。
    替换 “R ”为"R="  
    替换 由R开头的  "S+" 替换为"RS=" 依次类推。。 
      

  2.   

    本帖最后由 lxcnn 于 2010-07-05 18:01:57 编辑
      

  3.   


                string test = @"Welch Allyn SureSigtR 8 S+1.50 C-0.50 A142
    L 9 S+1.75 C-0.50 A161Name:刘小明Date:2010-05-01 19:00:001
    ";
                MatchCollection mc = Regex.Matches(test, @"(?n)R (?<r>\d+) S(?<rs>([+-]?\d+(\.\d+)?)) C(?<rc>([+-]?\d+(\.\d+)?)) A(?<ra>([+-]?\d+(\.\d+)?))\r\nL (?<l>\d+) S(?<ls>([+-]?\d+(\.\d+)?)) C(?<lc>([+-]?\d+(\.\d+)?)) A(?<la>([+-]?\d+(\.\d+)?))\s+Name:(?<name>\S+)\s+Date:(?<date>\d{4}-\d{2}-\d{2}) \d{2}:\d{2}:\d{2}");
                foreach (Match m in mc)
                {
                    Console.WriteLine("R=" + m.Groups["r"].Value);
                    Console.WriteLine("RS=" + m.Groups["rs"].Value);
                    Console.WriteLine("RC=" + m.Groups["rc"].Value);
                    Console.WriteLine("RA=" + m.Groups["ra"].Value);
                    Console.WriteLine("L=" + m.Groups["l"].Value); 
                    Console.WriteLine("LS=" + m.Groups["ls"].Value);
                    Console.WriteLine("LC=" + m.Groups["lc"].Value);
                    Console.WriteLine("LA=" + m.Groups["la"].Value);
                    Console.WriteLine("Name=" + m.Groups["name"].Value);
                    Console.WriteLine("Date=" + m.Groups["date"].Value);
                }
      

  4.   

    Regex reg = new Regex(@"(?i)\b([RLSCA]|Name:|Date:)\s*([-+\d.]+)");
    -修改为->
    Regex reg = new Regex(@"(?i)\b([RLSCA]|Name:|Date:)\s*(\S+)");
      

  5.   


    你是不是测试方法不对?
            private static void TestRegex01()
            {
                string test = @"Welch Allyn SureSigtR 8 S+1.50 C-0.50 A142
    L 9 S+1.75 C-0.50 A161Name:刘小明Date:2010-05-01 19:00:001
    ";
                MatchCollection mc = Regex.Matches(test, @"(?n)R (?<r>\d+) S(?<rs>([+-]?\d+(\.\d+)?)) C(?<rc>([+-]?\d+(\.\d+)?)) A(?<ra>([+-]?\d+(\.\d+)?))\r\nL (?<l>\d+) S(?<ls>([+-]?\d+(\.\d+)?)) C(?<lc>([+-]?\d+(\.\d+)?)) A(?<la>([+-]?\d+(\.\d+)?))\s+Name:(?<name>\S+)\s+Date:(?<date>\d{4}-\d{2}-\d{2}) \d{2}:\d{2}:\d{2}");
                foreach (Match m in mc)
                {
                    Console.WriteLine("R=" + m.Groups["r"].Value);
                    Console.WriteLine("RS=" + m.Groups["rs"].Value);
                    Console.WriteLine("RC=" + m.Groups["rc"].Value);
                    Console.WriteLine("RA=" + m.Groups["ra"].Value);
                    Console.WriteLine("L=" + m.Groups["l"].Value);
                    Console.WriteLine("LS=" + m.Groups["ls"].Value);
                    Console.WriteLine("LC=" + m.Groups["lc"].Value);
                    Console.WriteLine("LA=" + m.Groups["la"].Value);
                    Console.WriteLine("Name=" + m.Groups["name"].Value);
                    Console.WriteLine("Date=" + m.Groups["date"].Value);
                }
            }
        }
    输出结果:R=8
    RS=+1.50
    RC=-0.50
    RA=142
    L=9
    LS=+1.75
    LC=-0.50
    LA=161
    Name=刘小明
    Date=2010-05-01
      

  6.   

    或是过客兄的换为:            string test = @"Welch Allyn SureSigtR 8 S+1.50 C-0.50 A142
    L 9 S+1.75 C-0.50 A161Name:刘小明Date:2010-05-01 19:00:001";
                Regex reg = new Regex(@"(?i)\b([RLSCA]|Date:)\s*(?<value>[-+\d.]+)|Name:(?<value>\S+)");
                MatchCollection mc = reg.Matches(test);
                foreach (Match m in mc)
                {
                    Console.WriteLine(m.Groups["value"].Value);
                }