匹配 R 中序列的开头

问题描述 投票:0回答:1

我在向量中有一系列字符串,需要从字符串中删除匹配的起始模式。 但是,我不知道图案或它有多长。

stringa <- c("apple_tart", "apple_pie", "apple_fritter")
stringb <- c("baby breath", "baby oil", "baby doll", "baby name")

我希望结果是这样。 我需要一个适用于 a 和 b 的函数或方法

resultsa  <- c("tart", "pie", "fritter")
resultsb <- c("breath", "oil", "doll", "name")

我知道如果我知道模式或匹配模式有多长,我可以使用 str_remove 来做到这一点。 有没有办法做到这一点? 也许首先找到起始字符串模式然后使用 str_remove?

r string string-matching
1个回答
0
投票

您可以编写一个函数来查找最长的共享前缀。例如

common_prefix <- function(x) {
  best <- min(nchar(x))
  while (best > 0) {
    prefix <- substr(x,1, best)
    if (all(prefix==prefix[1])) {
      return(prefix[1])
    } else {
      best <- best - 1
    }
  }
  return(NA)
}
common_prefix(stringa)
# [1] "apple_"
common_prefix(stringb)
# [1] "baby "
© www.soinside.com 2019 - 2024. All rights reserved.