我正在尝试使用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吗?什么是正则表达式?
感谢。
答案 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