C#提取字符串的某些部分

时间:2009-10-23 09:51:31

标签: c# asp.net regex

我有一个控制台应用程序,它通过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跨度括号有关?我想要的只是特定范围的标签之间的文本值。

提前致谢!

3 个答案:

答案 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>");