我有一个包含单词和字符混合的长字符串。
<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)
但这显然不会起作用,因为有许多角色混合。
答案 0 :(得分:3)
你应该在这里使用HTML解析器。话虽如此,以下一个gsub
的班轮可能工作:
gsub(".*?<a href=[^>]*>\\s*(.*?)\\s*</a>.*", "\\1", input)
我说可能因为我做了很多假设,包括标题锚标记是第一个,并且你没有嵌套内容。实际上,您可以尝试使用HTML / XML解析器来实现更好的控制。
答案 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()