【问题标题】:Extracting end of string with variable lenght [duplicate]提取具有可变长度的字符串结尾[重复]
【发布时间】:2019-03-06 17:07:43
【问题描述】:

假设你有一个这样的字符向量:

x <- c('file_123',
       'file_456',
       'file_clean_67890',
       '123_file_1234')

并且您想提取最后一个"_" 之后的字符串结尾。你会怎么做?我想要的结果是:

"123"   "456"   "67890" "1234" 

如果您使用str_split,则无法获得最后一个,因为它们的长度不同:

> x %>% str_split(pattern = '_', simplify = T)
     [,1]   [,2]    [,3]  
[1,] "file" "123"   ""    
[2,] "file" "456"   ""    
[3,] "file" "clean" "6789"
[4,] "123"  "file"  "1234"

这个问题与this one 有点重复,不同之处在于我不知道拆分的数量。此外,您可以在最后一个下划线之前有数字字符,因此您不能只检测到这些字符。

【问题讨论】:

  • 使用TRUE 和FALSE 而不是T 和F!后者是变量,可以在代码中更改。

标签: r regex stringr


【解决方案1】:

将 stringr 中的 str_extract_all 与正则表达式一起使用。有关[:digit:]、+ 和$ 元字符的信息,请参阅?regular expression:

str_extract_all(x,"_[[:digit:]]+$")

【讨论】:

  • 你也可以使用R基础sub:sub(".*_(\\d+)", "\\1", x)
  • 我猜它会是str_extract_all(x,"[[:digit:]]+$"),因为我实际上并不想要最后一个"_",但它确实有效。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-08-17
  • 1970-01-01
  • 1970-01-01
  • 2018-03-03
  • 2014-10-16
  • 2017-05-21
  • 2017-11-06
相关资源
最近更新 更多