我有一个控制台应用程序,它通过WebRequest方法(http)解析HTML文档。问题实际上是从返回的html代码中提取数据。
以下是我感兴趣的html片段:
<span class="header">Number of People:</span>
<span class="peopleCount">1001</span> <!-- this is the line we are interested in! -->
<span class="footer">As of June 2009.</span>
假设上面的html包含在名为“responseHtml”的字符串中。我想提取“人数统计”值,(第二行)。
我搜索了堆栈溢出流程,发现了一些可行的代码:
How do I extract text that lies between parentheses (round brackets)?
但是当我实现它时,它不起作用 - 我不认为它喜欢我将HTML标记放入正则表达式的方式:
string responseHtml; // this is already filled with html code above ^^
string insideBrackets = null;
Regex regex = new Regex("\\<span class=\"peopleCount\">?<TextInsideBrackets>\\w+\\</span>");
Match match = regex.Match(responseHtml);
if (match.Success)
{
insideBrackets = match.Groups["TextInsideBrackets"].Value;
Console.WriteLine(insideBrackets);
}
上面的内容无法正常工作,是否与html跨度括号有关?我想要的只是特定范围的标签之间的文本值。
提前致谢!
答案 0 :(得分:3)
?<TextInsideBrackets>
不正确
你需要:
(?<TextInsideBrackets>...)
答案 1 :(得分:3)
试试这个:
Regex regex = new Regex("class=\\\"peopleCount\\\"\\>(?<data>[^\\<]*)",
RegexOptions.CultureInvariant
| RegexOptions.Compiled
);
它应该有点快,因为你基本上说你要找的数据是在peopleCount“&gt;之后开始并在第一个&lt;
结束(我将组名更改为数据)
干杯, 弗洛里安
答案 2 :(得分:1)
我假设您想要进行命名捕获。
你应该使用
Regex regex = new Regex("\\<span class=\"peopleCount\">(?<TextInsideBrackets>\\w+)\\</span>");
而不是
Regex regex = new Regex("\\<span class=\"peopleCount\">?<TextInsideBrackets>\\w+\\</span>");