foreach (Match m in Regex.Matches(html, @"(?is)<input[^>]+(name=(['""]*)(?<name>[^>]*)\2)*[^>]+(value=(['""]*)(?<value>[^>]*)\4)*[^>]+/>"))
                Console.WriteLine(m.Value);

解决方案 »

  1.   

    刚刚测试过您的正则 但是 捕获不到name 的值了
      

  2.   


                string str = File.ReadAllText(@"E:\t.txt", Encoding.GetEncoding("gb2312"));//换成你的字符串
                Regex reg = new Regex(@"(?is)<input[^>]*?name=(['""\s]?)(?<Name>[^'""\s]+)\1[^>]*?(?:value=(['""\s]+)(?<Value>[^'""\s]+)\2[^>]*?)?>");
                foreach (Match m in reg.Matches(str))
                {
                    Console.WriteLine("name:{0} Value:{1}", m.Groups["Name"].Value, m.Groups["Value"].Value);
                }
      

  3.   

    要注意,name和value的顺序不是固定的,可能name在前,也可能value在前或有name,没value或有value,没name
      

  4.   

    3楼给的正则 测试一样 捕获name 组的时候没值 我需要的改善正则 要考虑到 input 顺序以及其他别的情况 您看我目前的这个只是偶尔匹配一些其他的有问题  希望帮我改善下