不能让我的正则表达式工作

本文关键字:工作 正则表达式 我的 不能 | 更新日期: 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