C# Can';我不能让我的正则表达式工作

C# Can';我不能让我的正则表达式工作,c#,regex,C#,Regex,我正在尝试使用C#从html响应页面中提取一些标记之间的文本 我需要值79bddb76e349d12a5be85c0d183923f7。只有该值发生变化,零件值=1每次都保持不变。还要注意,在此字段之前还有两个隐藏字段: <input type="hidden" name="test" value="example" /> <input type="hidden" name="task" value="login" /> 那么我需要使用matchcollect

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


我需要值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,然后使用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); 
}
IEnumerable GetNamesInHtml(字符串html)
{
常量字符串模式=@“”;
返回Regex.Matches(html、模式)
第()类
.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
字符串输入=@”
其他html sldkjflsdkjf ipsum
";
foreach(GetNamesInHtml中的字符串s(输入))
控制台。写入线(s);
//印刷品:
//79bddb76e349d12a5be85c0d183923f7
//33947f979873987d9879283473a98738

通常,将文档解析为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); 
}
IEnumerable GetNamesInHtml(字符串html)
{
常量字符串模式=@“”;
返回Regex.Matches(html、模式)
第()类
.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
字符串输入=@”
其他html sldkjflsdkjf ipsum
";
foreach(GetNamesInHtml中的字符串s(输入))
控制台。写入线(s);
//印刷品:
//79bddb76e349d12a5be85c0d183923f7
//33947f979873987d9879283473a98738

从简单的正则表达式匹配开始,然后尝试添加越来越多的部分。如果你是一个初学者,你可能不会在一次运行中成功编写整个正则表达式。从一个简单的正则表达式匹配开始,然后尝试添加更多的部分。如果您是一名初学者,您可能无法在一次运行中成功编写整个正则表达式;新正则表达式(“\”名称=\”([^\“]+)\”值=\”1\”;