从 html 文件中提取文件名
Extracting file names from html file
这是我正在处理的字符串示例
string <- c("<tr><td valign=\"top\"><img src=\"/icons/compressed.gif\" alt=\"[ ]\"></td><td><a href=\"ABC.RAP_0.9.0.zip\">ABC.RAP_0.9.0.zip</a></td><td align=\"right\">2018-03-20 21:52 </td><td align=\"right\">4.6M</td><td> </td></tr>",
"<tr><td valign=\"top\"><img src=\"/icons/compressed.gif\" alt=\"[ ]\"></td><td><a href=\"ABCanalysis_1.2.1.zip\">ABCanalysis_1.2.1.zip</a></td><td align=\"right\">2017-12-09 13:59 </td><td align=\"right\"> 54K</td><td> </td></tr>",
"<tr><td valign=\"top\"><img src=\"/icons/compressed.gif\" alt=\"[ ]\"></td><td><a href=\"ABCoptim_0.15.0.zip\">ABCoptim_0.15.0.zip</a></td><td align=\"right\">2018-03-20 21:53 </td><td align=\"right\">566K</td><td> </td></tr>")
此字符串由
生成
readLines("https://dirichlet.mat.puc.cl/bin/windows/contrib/3.3/")
我需要提取 R 包名称。我可以像这样使用 sub
来做到这一点:
> gsub("(.\.zip).*", "\1", sub(".*href[[:punct:]]{2}", "", string))
[1] "ABC.RAP_0.9.0.zip" "ABCanalysis_1.2.1.zip" "ABCoptim_0.15.0.zip"
如您所见,我使用了 gsub
两次,我正在寻找一种更简单的方法,只需调用一次 gsub
即可。我只想使用 R 基本函数来完成它。
不要使用 RegEx 来解析 HTML。像这样用 rvest
试试
library(rvest)
url <- 'https://dirichlet.mat.puc.cl/bin/windows/contrib/3.3/'
packageList <- url %>% read_html() %>% html_nodes("a") %>% html_text()
# remove extra entries
packageList <- packageList[7:length(packageList)]
head(packageList)
[1] "A3_1.0.0.zip" "ABC.RAP_0.9.0.zip" "ABCanalysis_1.2.1.zip" "ABCoptim_0.15.0.zip" "ABCp2_1.2.zip"
[6] "ABHgenotypeR_1.0.1.zip"
我可以使用这个简单的正则表达式解决我的问题:
> gsub(".*>(.*\.zip)<.*", "\1", string)
[1] "ABC.RAP_0.9.0.zip" "ABCanalysis_1.2.1.zip" "ABCoptim_0.15.0.zip"
这是我正在处理的字符串示例
string <- c("<tr><td valign=\"top\"><img src=\"/icons/compressed.gif\" alt=\"[ ]\"></td><td><a href=\"ABC.RAP_0.9.0.zip\">ABC.RAP_0.9.0.zip</a></td><td align=\"right\">2018-03-20 21:52 </td><td align=\"right\">4.6M</td><td> </td></tr>",
"<tr><td valign=\"top\"><img src=\"/icons/compressed.gif\" alt=\"[ ]\"></td><td><a href=\"ABCanalysis_1.2.1.zip\">ABCanalysis_1.2.1.zip</a></td><td align=\"right\">2017-12-09 13:59 </td><td align=\"right\"> 54K</td><td> </td></tr>",
"<tr><td valign=\"top\"><img src=\"/icons/compressed.gif\" alt=\"[ ]\"></td><td><a href=\"ABCoptim_0.15.0.zip\">ABCoptim_0.15.0.zip</a></td><td align=\"right\">2018-03-20 21:53 </td><td align=\"right\">566K</td><td> </td></tr>")
此字符串由
生成readLines("https://dirichlet.mat.puc.cl/bin/windows/contrib/3.3/")
我需要提取 R 包名称。我可以像这样使用 sub
来做到这一点:
> gsub("(.\.zip).*", "\1", sub(".*href[[:punct:]]{2}", "", string))
[1] "ABC.RAP_0.9.0.zip" "ABCanalysis_1.2.1.zip" "ABCoptim_0.15.0.zip"
如您所见,我使用了 gsub
两次,我正在寻找一种更简单的方法,只需调用一次 gsub
即可。我只想使用 R 基本函数来完成它。
不要使用 RegEx 来解析 HTML。像这样用 rvest
library(rvest)
url <- 'https://dirichlet.mat.puc.cl/bin/windows/contrib/3.3/'
packageList <- url %>% read_html() %>% html_nodes("a") %>% html_text()
# remove extra entries
packageList <- packageList[7:length(packageList)]
head(packageList)
[1] "A3_1.0.0.zip" "ABC.RAP_0.9.0.zip" "ABCanalysis_1.2.1.zip" "ABCoptim_0.15.0.zip" "ABCp2_1.2.zip"
[6] "ABHgenotypeR_1.0.1.zip"
我可以使用这个简单的正则表达式解决我的问题:
> gsub(".*>(.*\.zip)<.*", "\1", string)
[1] "ABC.RAP_0.9.0.zip" "ABCanalysis_1.2.1.zip" "ABCoptim_0.15.0.zip"