如何仅调用一次gsub从HTML字符串提取R包文件名(仅用R基础函数)
用单次
gsub()提取R包文件名 当然可以简化!我们只需要写一个精准的正则表达式,一次调用gsub()就能从你的HTML字符串里提取出所有R包的zip文件名,完全用R基础函数实现:
实现代码
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>") # 单次gsub提取 extracted_names <- gsub('.*href="([^"]+\\.zip)".*', "\\1", string) extracted_names
输出结果
[1] "ABC.RAP_0.9.0.zip" "ABCanalysis_1.2.1.zip" "ABCoptim_0.15.0.zip"
正则表达式解释
.*href=":匹配字符串开头到href="的所有内容(贪婪匹配,确保定位到正确的链接位置)([^"]+\\.zip):这是我们要捕获的核心内容,[^"]+表示匹配任意非双引号的字符(避免越过当前链接),\\.zip确保我们只提取以.zip结尾的文件名,括号用来标记捕获组.*:匹配".zip"之后的所有剩余内容\\1:替换时只保留第一个捕获组的内容,也就是我们需要的R包文件名
这样就完全替代了原来两次调用gsub()的逻辑,更简洁高效~
内容的提问来源于stack exchange,提问作者Jilber Urbina
相关产品推荐
相关产品推荐

