【问题标题】:Regular expression that removes attributes from tags从标签中删除属性的正则表达式
【发布时间】:2017-11-28 01:00:21
【问题描述】:

我感兴趣的是一个正则表达式,它将接受 HTML 输入并删除标签内的所有属性,同时保持标签完好无损。比如我想要这个……

<p class="test" id="TestParagraph">This is some test text right here.</p>

变成这样……

<p>This is some test text right here.</p>

任何帮助将不胜感激。

【问题讨论】:

  • 请参阅this answer。然后,使用真正的 HTML 解析器,而不是认为正则表达式甚至可以工作。
  • 他们想要做的就是从 XML 元素中剥离属性。我可能错了,但这似乎很简单。
  • 为什么要对不涉及正则语言的任务使用正则表达式?这就像试图用锤子拧螺丝一样。我确信它可以为“完成”的某种定义完成,但它不会很漂亮,结果也不会那么健壮。
  • “……根据‘完成’的定义。”我喜欢这样。

标签: asp.net html regex


【解决方案1】:

您真的不想为此使用正则表达式。 HTML 不是regular language,您不能保证您的实际文本不会模仿标签并被剥离。无论你想出什么表达方式,总会有打破它的案例。

我建议将Html Agility Pack 用于您需要执行的任何 HTML 操作。

【讨论】:

  • 能否请您详细说明“您不能保证您的实际文本不会模仿标签”?
  • 内容可能包含“id=something”形式的文本,您的正则表达式可能会将其删除。或者可能包含一个 html 注释标签。最终,您很可能可以构建一个 99.99% 的时间都有效的正则表达式,但我认为这绝不是正确的方法。
  • 今天早上做了一些研究,下载了 HTML Agility Pack,现在可以使用它,感谢您的意见。
【解决方案2】:

HTML 不是regular language,因此在尝试使用正则表达式解析它时会遇到问题。正如 Greg 上面提到的,您可能希望查看一个 HTML 解析器来为您完成这项工作。

享受吧!

【讨论】:

  • +1 表示点连接正则语言 - 正则表达式
【解决方案3】:

抱歉,不是not answering the question

你可以从这个开始

<(\S+)[^>]+>

替换为

<$1>

当然,如果输入包含脚本或 CDATA 部分,或者各种情况,这将很容易被破坏。但它对于您的输入集可能已经足够接近了。

【讨论】:

  • 如果 OP 决定做错事,他们至少应该使用比这更好的表达方式......删除不需要的转义并简化标签名称,你会得到&lt;(\S+)[^&gt;]+&gt;,它更具可读性.
猜你喜欢
  • 2011-04-18
  • 2011-07-27
  • 1970-01-01
  • 2018-08-13
  • 1970-01-01
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 2017-08-16
相关资源
最近更新 更多