【问题标题】:Substring character string based on a certain character in string [duplicate]基于字符串中某个字符的子字符串字符串[重复]
【发布时间】:2017-02-15 05:11:06
【问题描述】:

我有一个向量,其中包含多个元素作为字符串,由/ 分割:

aa <- c("Session/1/Focal_011/Dave_1", "Session/2/Focal_223/Dave_2", 
        "Session/3/Focal_23/Quentin_3", "Session/4/Focal_4/Gerald_4",
        "Session/5/Focal_521/Pedro_5")

我想从每个元素中保留Name_n,其中n = element number

我可以使用substr 取决于字符串中的/ 字符

使用substr(aa, 21, nchar(aa)) 我明白了

[1] "Dave_1"   "Dave_2"   "uentin_3" "rald_4"   "Pedro_5" 

这是因为字符串是不同的length

我怎样才能标准化它,所以我只保留最后一个/

使用regex?如果有,怎么做?

【问题讨论】:

  • 还有basename(aa)
  • 我不同意这是一个重复的问题。我不知道如何用您认为原始答案中给出的答案来回答我的问题。但这可能是由于我的n00bness
  • 用“/”替换空格,这是“单词”的分隔符。这实际上是 jilber 的答案所做的,除了它使用第 4 个单词而不是最后一个单词 (tail(.., 1))
  • 谢谢Cath,这真的很有帮助。 basename也很不错!
  • 各位,如果我遇到真正的骗子,我会重新关闭。

标签: r regex string substring


【解决方案1】:

使用

> aa <- c("Session/1/Focal_011/Dave_1", "Session/2/Focal_223/Dave_2", "Session/3/Focal_23/Quentin_3", "Session/4/Focal_4/Gerald_4", "Session/5/Focal_521/Pedro_5")
> sub("^.*/(.*)$", "\\1", aa)
[1] "Dave_1"    "Dave_2"    "Quentin_3" "Gerald_4"  "Pedro_5"  

请参阅online demo

^.*/(.*)$ 将匹配任何 0+ 个字符,直到最后一个 / 和斜线,然后将其余部分捕获到组 1 中,该组将使用替换模式中的 \1 反向引用进行恢复。

【讨论】:

  • 这就是我想要的!谢谢维克托!
  • @Bonono 是的,但是原帖还是更好,你可以用sub("^.*/", "", aa),或者basename
【解决方案2】:

这是使用strsplit的另一种选择

> sapply(strsplit(aa, "/"), "[", 4)
[1] "Dave_1"    "Dave_2"    "Quentin_3" "Gerald_4"  "Pedro_5"  

【讨论】:

  • tail, 1[, 4 安全得多,但我想它已经在我提供的欺骗中了
猜你喜欢
  • 1970-01-01
  • 2020-07-09
  • 1970-01-01
  • 2014-02-04
  • 1970-01-01
  • 2011-10-22
  • 2011-07-25
  • 2014-11-05
  • 2022-01-07
相关资源
最近更新 更多