【问题标题】:Extract all html tag closed with a regex expression提取所有用正则表达式关闭的 html 标记
【发布时间】:2012-04-08 11:50:06
【问题描述】:

我在 R 上工作,我想提取所有关闭的 HTML 标记 来自纯文本文档。 我使用带有正则表达式的 gsub 方法:

gsub("<?!([^<]/*)>"," ",fm,perl=TRUE,ignore.case=TRUE)

但是,斜线“/”没有被计算。


我想我不是很清楚。

这是我需要做的:

我有一个文本(HTML 文档),我只想保留标签(&lt;&gt;&lt;/&gt;)。我认为使用 gsub 是个好主意,但也许您有更好的解决方案。

【问题讨论】:

  • 是否需要转义/
  • 我同意 Ben 的观点,如果这被解析为 perl 正则表达式,perl 不使用 / 作为分隔符吗?
  • 斜线不需要转义(Perl 可以使用任何东西作为分隔符)。 ?! 是否应该是负前瞻?正确的语法是(?!...)。要解析 XML,您可以使用 XML 包:它将为您完成所有工作。

标签: html regex r regex-negation


【解决方案1】:

你的问题的措辞不清楚,你的正则表达式没有多大意义,但如果你只是想匹配任何看起来像 HTML 标签的东西,应该这样做:

"<[^<>]+>"

这将匹配开始和结束标签(例如,&lt;tag attr="value"&gt;&lt;/tag&gt;)。如果您只想匹配自闭合标签(例如,&lt;tag /&gt;),这应该可以:

"<[^<>]+/>"

其他人建议斜杠 (/) 具有特殊含义,需要转义,但事实并非如此。如果您使用的是 Perl,则可以使用以下命令进行替换:

s/<[^<>]+\/>/ /g

但是斜线本身并没有什么特殊含义;我只需要转义它,因为我将它用作正则表达式分隔符。我可以轻松地使用不同的分隔符:

s~<[^<>]+/>~ ~g

但是 R 不像 Perl 那样支持语言级别的正则表达式;正则表达式和替换以字符串文字的形式编写,就像它们(例如)在 Java 和 C# 中一样。而且与 PHP 不同的是,它不需要你添加分隔符,如下所示:

preg_replace("/<[^<>]+\/>/", " ")

但即使是 PHP 也允许您选择自己的分隔符:

preg_replace('~<[^<>]+/>~', ' ')

在有人对此提出质疑之前,我知道&lt;[^&lt;&gt;]+&gt; 是有缺陷的——事实上,HTML 标记没有正确的正则表达式。这在很多情况下都可以,但解析 HTML 唯一真正可靠的方法是使用专用的 HTML 解析器。

【讨论】:

    【解决方案2】:

    可能需要“转义”:\\/

    【讨论】:

      猜你喜欢
      • 2020-11-07
      • 2011-04-01
      • 1970-01-01
      • 2013-06-25
      • 2011-01-24
      • 2014-01-29
      • 2011-10-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多