构建正则表达式(RegEx)以提取HTML标记的文本

时间:2009-06-30 01:41:25

标签: html regex

我正在尝试构建一个正则表达式来提取HTML标记内的文本,如下所示。但是我在正则表达式方面的技能有限,而且我在构建字符串时遇到了麻烦。

如何从此标记中提取文本:

<a href="javascript:ProcessQuery('report_drilldown',145817)">text</a>

这只是页面HTML源代码的示例。基本上,我需要一个regex字符串来匹配<a>标记内的“文本”。任何人都可以帮我这个吗?谢谢。我希望我的问题不是太可怕了。

更新:为了澄清,report_drilldown是绝对的,但我并不在乎regex中是否存在绝对值。

145817是一个随机的6位数字,实际上是数据库ID。 “text”只是简单的纯文本,所以它不应该是无效的HTML。此外,大多数人都说在这种情况下最好不要使用正则表达式,那么最好使用什么?非常感谢!

4 个答案:

答案 0 :(得分:4)

答案是......不要!

使用库,例如​​this one

答案 1 :(得分:2)

<a href="javascript:ProcessQuery\('report_drilldown',[0-9]+\)">([^<]*)</a>

这不会真正解决问题,但它可能只是勉强可以解决。特别是,它非常脆弱,对标记的最轻微改变并不匹配。如果report_drilldown不是绝对的,请将其替换为[^']*,和/或在需要时捕获它和数字。

如果你需要解析HTML的东西,那么如果你不得不处理标签汤,这将是一场噩梦。如果您使用的是Python,我建议使用BeautifulSoup,但我不知道C#的类似内容。 (任何人都知道C#的类似标签汤解析库吗?)

答案 2 :(得分:1)

我同意正则表达式可能不是解析它的最好方法,但使用反向引用很容易做到:

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

其中标记文本被命名为捕获组。

hat-tip:expresso library

答案 3 :(得分:-1)

<a href\=\"[^\x00]*?\">

应该为您提供开始标记。

<\/a>

将为您提供结束标记。只需提取出介于两者之间的内容。虽然未经测试。