构建正则表达式(RegEx)以提取 HTML 标记的文本 [重复]
Posted
技术标签:
【中文标题】构建正则表达式(RegEx)以提取 HTML 标记的文本 [重复]【英文标题】:Building Regular Expression (RegEx) to extract text of HTML tag [duplicate] 【发布时间】:2010-11-06 21:02:49 【问题描述】:我正在尝试构建一个正则表达式来提取 html 标记内的文本,如下所示。但是,我在正则表达式方面的技能有限,并且在构建字符串时遇到了麻烦。
如何从这个标签中提取文本:
<a href="javascript:ProcessQuery('report_drilldown',145817)">text</a>
这只是页面的 HTML 源代码示例。基本上,我需要一个regex
字符串来匹配<a>
标签内的“文本”。任何人都可以帮助我吗?谢谢你。我希望我的问题没有措辞太可怕。
更新:为了澄清起见,report_drilldown
是绝对的,但我真的不在乎它是否在 regex
中作为绝对存在。
145817 是一个随机的 6 位数字,实际上是一个数据库 ID。 “文本”只是简单的纯文本,所以它不应该是无效的 HTML。另外,大多数人都说在这种情况下最好不要使用正则表达式,那么最好使用什么?非常感谢!
【问题讨论】:
用regex解决解析HTML的问题?现在你有两个问题。 怎么样?我之前在另一个任务非常相似的项目中使用过正则表达式。也许用别的东西来提取标签的文本会更好? 使用正则表达式解析 HTML 通常是一件坏事:***.com/questions/701166 使用正则表达式的 HTML 解析不适用于无效的 html,即使是有效的 html 案例也会很痛苦。最好在 C# 中使用 Dom Document 实现,并访问特定节点的 textContent[s]。 【参考方案1】:答案是……不要!
使用库,例如this one
【讨论】:
【参考方案2】:我同意正则表达式可能不是解析这个的最佳方法,但使用反向引用很容易做到:
<(?<tag>\w*)(?:.*)>(?<text>.*)</\k<tag>>
其中 tag 和 text 被命名为捕获组。
帽子提示:expresso 库
【讨论】:
即使假设输入格式正确(如果不是,这种解析方式可能会失败,或者更糟糕的是,错误地成功),这个示例输入显示了两个问题:1) 文本更多文本。 2) ab。当然,你的答案确实不比我的好,但我会犹豫是否称它很容易完成。正则表达式根本不适合这项工作,即使它偶尔会起作用。 好的。我将继续寻找一种非常“安全”和“好”的方法来处理这种“标签汤”,但现在,由于 R. Pate 的正则表达式正在工作,我将继续使用它,直到找到更好的解决方案。非常感谢大家!!!【参考方案3】:<a href="javascript:ProcessQuery\('report_drilldown',[0-9]+\)">([^<]*)</a>
这并不能真正解决问题,但可能只是勉强凑合。特别是,它非常脆弱,对标记稍作改动,它就不会匹配。如果report_drilldown
不是绝对的,请将其替换为[^']*
,和/或根据需要同时捕获它和数字。
如果您需要解析 HTML 的东西,那么如果您必须处理标签汤,那将是一场噩梦。如果您使用的是 Python,我建议您使用 BeautifulSoup,但我不知道 C# 有类似的东西。 (有人知道类似的 C# 标签汤解析库吗?)
【讨论】:
HTML 中的属性不应包含 是的,我很抱歉愚蠢的控制台字体把我弄糊涂了——它应该是 ()。感谢您的帮助! 哈,我更新我的帖子,看到你的答案,现在回滚到原来的。 对不起!!!!我的错 - 现在我确信我需要为 CMD 找到更好的字体。谢谢! Lucida Console 和 Envy Code R(在 google 上搜索)对我来说效果很好。【参考方案4】:<a href\=\"[^\x00]*?\">
应该给你打开标签。
<\/a>
会给你结束标签。只需提取介于两者之间的内容。但未经测试。
【讨论】:
你的意思是 \x 而不是 /x?为什么除了 null 之外的任何字符?为什么 = 和 " 被转义了?因为你没有在 sed 样式中使用 / 分隔符,所以转义 / 也有点奇怪。以上是关于构建正则表达式(RegEx)以提取 HTML 标记的文本 [重复]的主要内容,如果未能解决你的问题,请参考以下文章