2011-07-24 24 views
0

我想从使用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

你尝试过什么正则表达式? – Mat

+0

从一个简单的正则表达式匹配开始,然后尝试添加越来越多的部分。如果您是初学者,您可能无法在一次运行中编写整个正则表达式。 –

回答

4

你可以尝试解析文档转换成XHTML,然后使用XPath提取所需的信息:

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

用正则表达式,你可以使用这些方针的东西:

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

new Regex(“\”name = \“([^ \”] +)“value = \”1 \“”); –

+0

new Regex(“\”name = \“([^ \”] +)“value = \”1 \“”);不起作用 –

+0

@JG它没有工作 –

0

一般,因为使用正则表达式解析HTML可能会很脆弱,所以将该文档解析为XHTML优于直接在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