无法让我的正则表达式工作

时间:2011-07-24 16:01:16

标签: c# regex

我正在尝试使用C#从html响应页面中的某些标签之间提取文本。

<input type="hidden" name="79bddb76e349d12a5be85c0d183923f7" value="1" /> 

我需要值79bddb76e349d12a5be85c0d183923f7。只有此值发生变化,零件值= 1每次都保持相同。另请注意,在此之前还有两个隐藏字段:

<input type="hidden" name="test" value="example" />

<input type="hidden" name="task" value="login" />

所以我需要使用matchcollections吗?什么是正则表达式?

感谢。

2 个答案:

答案 0 :(得分:4)

您可以尝试将文档解析为XHTML,然后使用XPath提取所需的信息:

//input[@value = '1']/name

使用正则表达式,您可以使用以下内容:

name="([^"]+)" value="1"

答案 1 :(得分:0)

通常,将文档解析为XHTML比直接在HTML上使用正则表达式更受欢迎,因为使用正则表达式解析HTML可能很脆弱。但是如果你想使用正则表达式,那么这样的东西可能会起作用:

IEnumerable<string> GetNamesInHtml(string html)
{
    const string pattern = @"<input type=\""hidden\"" "
           + @"name=\""([0-9a-f]{32})\"" value=\""1\"" />";
    return Regex.Matches(html, pattern)
         .OfType<Match>()
         .Select(x => x.Groups[1].Value); 
}

作为司机:

string input = @"<input type=""hidden"" name=""79bddb76e349d12a5be85c0d183923f7"" value=""1"" />
           other html <b>sldkjflsdkjf</b> ipsum 
           <input type=""hidden"" name=""task"" value=""login"" />
           <input type=""hidden"" name=""33947f979873987d9879283473a98738"" value=""1"" /> ";
foreach (string s in GetNamesInHtml(input))
    Console.WriteLine(s);
// prints:
// 79bddb76e349d12a5be85c0d183923f7
// 33947f979873987d9879283473a98738