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

时间:2017-11-13 02:27:25

标签: r regex string extract

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

<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)

但这显然不会起作用,因为有许多角色混合。

3 个答案:

答案 0 :(得分:3)

你应该在这里使用HTML解析器。话虽如此,以下一个gsub 的班轮可能工作:

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

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

Demo

答案 1 :(得分:3)

假设u是您获取此HTML的URL,HTML解析解决方案可能如下所示:

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

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

答案 2 :(得分:2)

You should not rely on regex for parsing HTML/XML - 它非常脆弱,容易破碎。考虑使用rvest。您可以从任何来源和read_html()获取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()