正则表达式捕获HTML的第一个<p> </p>

时间:2010-06-03 15:39:44

标签: .net regex

我有以下正则表达式:

(?:<(?<tag>\w*)>(?<text>.*)</\k<tag>>)

我希望它能抓住第一个HTML元素中的文本。

例如

<p>This should capture</p>This shouldn't

工作,但......

<p>This should capture</p><p>This shouldn't</p>

不起作用。正如您所期望的那样,它会返回:

This should capture</p><p>This shouldn't

我在这里绞尽脑汁。我怎样才能选择第一个内部文本?

(我正在尝试与标签无关,所以<strong>This should match</strong>同样适用,等等。)

3 个答案:

答案 0 :(得分:3)

您应该使用HTML Agility Pack

例如:

doc.DocumentNode.Descendants("p").First().InnerText

答案 1 :(得分:2)

停止。停下来。如果要解析HTML,请使用HTML解析器(如果您正在处理有效的XHTML,则使用XML)。有关详细信息,请参阅this answer

答案 2 :(得分:1)

为了有一个非贪婪的*选择,你应该添加一个?在*。

之后
(?:<(?<tag>\w*)>(?<text>.*?)</\k<tag>>)