如何从包含R中特殊字符和单词混合的字符串中提取标题

How to extract title from string containing mix of special characters and words in R

我有一个包含单词和字符混合的长字符串。

<h4>        <a href="/forum?id=SyBPtQfAZ">          Improving Discriminator-Generator Balance in Generative Adversarial Networks        </a>          <a href="/pdf?id=SyBPtQfAZ" class="pdf-link" title="Download PDF" target="_blank"><img src="/static/images/pdf_icon_blue.svg"/></a>              </h4>

我只需要提取标题:

Improving Discriminator-Generator Balance in Generative Adversarial Networks

我知道R有能力提取2个字符之间的单词,例如:

sub(">.*<", "", my_string)

但这显然在这里行不通,因为有很多字符混合在一起。

您应该在这里使用 HTML 解析器。话虽这么说,以下带有 gsub 的衬垫可能 有效:

gsub(".*?<a href=[^>]*>\s*(.*?)\s*</a>.*", "\1", input)

我说 可能 是因为我做了很多假设,包括标题锚标记是第一个标记,并且您没有嵌套内容。实际上,您可以尝试使用 HTML/XML 解析器进行更好的控制。

Demo

假设 u 是 URL 从哪里获得此 HTML,HTML 解析解决方案可能如下所示:

library(rvest)
titles <- read_html(u) %>%
  html_nodes("a[href^='/forum']") %>% 
  html_text() %>%
  trimws()

这假定标题的 href/forum 开头并使用 trimws 删除前导和尾随空格。

You should not rely on regex for parsing HTML/XML - 它非常脆弱,容易折断。考虑使用 rvest。您可以从任何来源获取 HTML 并使用 read_html() 来解析它。 html_text() 仅提取文本元素,trimws 修剪 HTML.

中经常存在的多余空白
library(rvest)
string = '<h4>        <a href="/forum?id=SyBPtQfAZ">          Improving Discriminator-Generator Balance in Generative Adversarial Networks        </a>          <a href="/pdf?id=SyBPtQfAZ" class="pdf-link" title="Download PDF" target="_blank"><img src="/static/images/pdf_icon_blue.svg"/></a>              </h4>'
read_html(string) %>% 
  html_text() %>% 
  trimws()