不能让我的正则表达式工作
本文关键字:工作 正则表达式 我的 不能 | 更新日期: 2023-09-27 18:03:25
我正在尝试使用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吗?正则表达式是什么?
谢谢。
您可以尝试将文档解析为XHTML,然后使用XPath提取所需的信息:
//input[@value = '1']/name
对于regex,您可以使用以下内容:
name="([^"]+)" value="1"
一般来说,将文档解析为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