我在字符向量中有许多URL,我试图使用基R从它们中提取子字符串,我想提取两种类型的子字符串:
我已经破解了这个问题的解决方案,但它涉及到许多不必要的步骤。是否有一种方法可以使用每个子字符串使用一个正则表达式来完成这一任务?
以下是我的工作实例:
# An example URL
a <- "https://cran.r-project.org/src/contrib/Archive/ggplot2/ggplot2_0.4.5.tar.gz"
# Keep everything after the last slash
b <- sub('.*\\/', '', a)
# Keep everything before .tar.gaz
c <- sub('.tar.*', '', b)
# Extract desired strings based on underscore
foo <- sub('.*\\_', '', c)
bar <- sub('\\_.*', '', c)对于这个例子来说,使用基R是很重要的。
发布于 2018-08-06 08:03:01
在basename和strsplit上使用_的解决方案
sub(".tar.*", "", strsplit(basename(a), "_")[[1]])
[1] "ggplot2" "0.4.5" 发布于 2018-08-06 07:59:06
使用围城
regmatches(a, regexpr('(?<=\\/)[^\\/]+(?=_)', a, perl = T))
[1] "ggplot2"
regmatches(a, regexpr('(?<=_)[^_]+(?=\\.tar\\.gz)', a, perl = T))
[1] "0.4.5"发布于 2018-08-06 07:59:30
试试这个模式:\/(?<package>[^\/]+)\_(?<version>[^\_\/]+).tar.gz$。
在匹配中,名为package的第一个捕获组将在字符串中的最后一个斜杠(/)之后和最后一个下划线(_)之前给出子字符串,第二个捕获组(名为version )将在最后一个下划线(_)之后和子字符串.tar.gz之前给出子字符串。
https://stackoverflow.com/questions/51702729
复制相似问题