日期:2014-05-17  浏览次数:21220 次

c#正则,根据name获取input的value值
本帖最后由 winseer 于 2013-01-17 18:20:00 编辑
用c#winform,获取到一个网页的html代码,想提取里面某个input里value的值:
例如:
<input type='hidden' name='rancode' value='1' />

从网上找到如下正则代码,但经过测试,无法获取到rancode的value,不太懂正则,请问这个正则有什么不对的地方吗?



//str:需要提取字符串,inputname:控件名称  
public string FindValueByName(string str, string inputname)
    {
        string reg = @"<input name=""(?<name>.*?)"" [\s\S]*?value=""(?<value>.*?)"" [\s\S]*?>";
        Regex r = new Regex(reg, RegexOptions.None);
        Match match = r.Match(str);
        string aa = "未找到";
        while (match.Success)
        {
            string name = match.Groups["name"].ToString();
            string value = match.Groups["value"].ToString();
            if (name == inputname)
            {
                return value;
            }
            else
            {
                match = match.NextMatch();
            }
        }
        return aa;
    }


请指点!谢谢!

------解决方案--------------------
 string str = "<input type='hidden' name='rancode' value='1' />";
            var ary = Regex.Matches(str, @"(?is)<input(?=[^>]*?name=[""'](?<name>[^""'\s]+)[""'])(?=[^>]*?value=[""'](?<value>[^""'\s]+)[""'])[^>]+>").OfType<Match>().Select(t => new { name = t.Groups["name"].Value, value = t.Groups["value"].Value }).ToArray();
           
------解决方案--------------------
<input type='hidden' name='rancode' value='1' />

Match match=Regex.Match(s,@"(?is)<input type=([""'])hidden\1 name=([""'])rancode\2 value=([""'])(?<value>.*?)\3\s*/>");
用match.Groups["value"].Value得到值
------解决方案--------------------
单引号双引号问题 这么明显.........