如何从包含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 解析器进行更好的控制。
假设 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()
我有一个包含单词和字符混合的长字符串。
<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 解析器进行更好的控制。
假设 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()