首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >提取子字符串,通过相对于其他相对定位字符的定位来定义

提取子字符串,通过相对于其他相对定位字符的定位来定义
EN

Stack Overflow用户
提问于 2018-08-06 07:41:03
回答 3查看 101关注 0票数 0

我在字符向量中有许多URL,我试图使用基R从它们中提取子字符串,我想提取两种类型的子字符串:

  • 字符串中最后一个斜杠(/)之后的子字符串和最后一个下划线(_)之前的子字符串。
  • 上一个下划线(_)之后和子字符串.tar.gz之前的子字符串。

我已经破解了这个问题的解决方案,但它涉及到许多不必要的步骤。是否有一种方法可以使用每个子字符串使用一个正则表达式来完成这一任务?

以下是我的工作实例:

代码语言:javascript
运行
复制
# 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是很重要的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-06 08:03:01

basenamestrsplit上使用_的解决方案

代码语言:javascript
运行
复制
sub(".tar.*", "", strsplit(basename(a), "_")[[1]])
[1] "ggplot2" "0.4.5" 
票数 2
EN

Stack Overflow用户

发布于 2018-08-06 07:59:06

使用围城

代码语言:javascript
运行
复制
regmatches(a, regexpr('(?<=\\/)[^\\/]+(?=_)', a, perl = T))
[1] "ggplot2"
regmatches(a, regexpr('(?<=_)[^_]+(?=\\.tar\\.gz)', a, perl = T))
[1] "0.4.5"
票数 1
EN

Stack Overflow用户

发布于 2018-08-06 07:59:30

试试这个模式:\/(?<package>[^\/]+)\_(?<version>[^\_\/]+).tar.gz$

在匹配中,名为package的第一个捕获组将在字符串中的最后一个斜杠(/)之后和最后一个下划线(_)之前给出子字符串,第二个捕获组(名为version )将在最后一个下划线(_)之后和子字符串.tar.gz之前给出子字符串。

演示

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51702729

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档