我正在尝试构建一个正则表达式来提取HTML标记内的文本,如下所示。但是我在正则表达式方面的技能有限,而且我在构建字符串时遇到了麻烦。
如何从此标记中提取文本:
<a href="javascript:ProcessQuery('report_drilldown',145817)">text</a>
这只是页面HTML源代码的示例。基本上,我需要一个regex
字符串来匹配<a>
标记内的“文本”。任何人都可以帮我这个吗?谢谢。我希望我的问题不是太可怕了。
更新:为了澄清,report_drilldown
是绝对的,但我并不在乎regex
中是否存在绝对值。
145817是一个随机的6位数字,实际上是数据库ID。 “text”只是简单的纯文本,所以它不应该是无效的HTML。此外,大多数人都说在这种情况下最好不要使用正则表达式,那么最好使用什么?非常感谢!
答案 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>
将为您提供结束标记。只需提取出介于两者之间的内容。虽然未经测试。