【问题标题】:Single Regex to strip all HTML but the anchors单个正则表达式去除除锚点之外的所有 HTML
【发布时间】:2018-11-01 09:21:09
【问题描述】:

这里已经多次询问了这个版本,使用这些版本我能够得到两个不同的正则表达式。

剥离所有 HTML

1. <[^>]*>

除了锚标签之外的所有内容

2. <a[^>]*>([^<]+)<\/a>

我没有希望将这些组合起来得到一个剥离所有 HTML 但保持锚点不变的正则表达式 (1+!2)。因此,我目前正在使用第一个正则表达式遍历我的 HTML,如果遇到通常位于锚点内的某个关键字,那么我会使用第二个正则表达式遍历 Body 并将两者结合起来。

这显然不理想,很可能会错过很多锚。

匹配所有 HTML 但锚点的单个正则表达式会是什么样子? /1?!2/

测试数据:https://www.regextester.com/?fam=105725 我需要所有大写字母及其周围的锚。

【问题讨论】:

  • 我没有看到任何问号?有些表达式可能会这样做,但请同时提供您的工具/编程语言。
  • 有关支持 (*SKIP)(*FAIL) 的引擎,请参阅 regex101.com/r/ISrz6O/1,但请注意嵌套结构容易出错(例如 HTML)。
  • @Jan 假设正则表达式在任何地方都是一样的,我的错。这个对我来说失败了,因为“量词 {x,y} 什么都没有。”但谢谢会调查它。
  • ]*>([^ 怎么样?
  • 令人惊讶的是,没有人大喊“不要用 RegEx 解析 HTML!” ;) This question almost always comes up

标签: c# asp.net regex


【解决方案1】:

无视我自己的评论 ;) - 这就是你所追求的吗?

替换

<((?!a|\/a)[^>]*)>\s*

带有空字符串。

打开&lt; 后的负前瞻确保它忽略锚点。

Here at regex101.

【讨论】:

  • 是的。如果它适用于测试数据,它确实如此,这就是我所追求的。谢谢。
  • 当然 ]*)>\s* 是一个好的开始,所以 +1,但细节上更棘手。如果您有像 asdfgoog 这样的文本,则 或任何其他以“
  • @quant 除了 span、head、meta 和通常的怀疑之外,我的 html 标签都没有以 a 开头,更不用说包含 a。因此,对于我的特殊情况,它可以完美运行。
  • @quant 可以增强到不匹配 alt 和喜欢只需添加一个单词边界 - &lt;((?!a\b|\/a\b)[^&gt;]*)&gt;\s*
  • 山姆,你是个英雄……(等一下,不是已经有一个叫山姆的英雄了吗?en.wikipedia.org/wiki/Samy_%28computer_worm%29
猜你喜欢
  • 2015-08-18
  • 2023-03-10
  • 2011-05-15
  • 1970-01-01
  • 1970-01-01
  • 2016-01-10
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多