我在字符向量中有很多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很重要。
答案 0 :(得分:2)
在basename
使用strsplit
和_
的解决方案:
sub(".tar.*", "", strsplit(basename(a), "_")[[1]])
[1] "ggplot2" "0.4.5"
答案 1 :(得分:1)
使用lookarounds:
regmatches(a, regexpr('(?<=\\/)[^\\/]+(?=_)', a, perl = T))
[1] "ggplot2"
regmatches(a, regexpr('(?<=_)[^_]+(?=\\.tar\\.gz)', a, perl = T))
[1] "0.4.5"
答案 2 :(得分:0)
尝试以下模式:\/(?<package>[^\/]+)\_(?<version>[^\_\/]+).tar.gz$
。
在比赛中,名为package
的第一个捕获组将为您提供字符串中最后一个斜杠(/)之后,最后一个下划线(_)前的子字符串,第二个,名为version
的子字符串会在最后一个下划线(_)之后,在子字符串.tar.gz之前。