R - 从字符串右侧第 n 次出现字符后提取信息

ale*_*523 9 regex string parsing r gsub

我见过很多提取 w/ 的迭代,gsub但它们主要处理从左到右或在一次发生后提取。我想从右到左匹配,计算 4 次出现-,匹配第 3 次和第 4 次出现之间的所有内容。

例如:

string                       outcome
here-are-some-words-to-try   some
a-b-c-d-e-f-g-h-i            f
Run Code Online (Sandbox Code Playgroud)

以下是我尝试使用的一些参考资料:

Jan*_*Jan 7

你可以用

([^-]+)(?:-[^-]+){3}$
Run Code Online (Sandbox Code Playgroud)

在 regex101.com 上查看演示


R这可能是

library(dplyr)
library(stringr)
df <- data.frame(string = c('here-are-some-words-to-try', 'a-b-c-d-e-f-g-h-i', ' no dash in here'), stringsAsFactors = FALSE)

df <- df %>%
  mutate(outcome = str_match(string, '([^-]+)(?:-[^-]+){3}$')[,2])
df
Run Code Online (Sandbox Code Playgroud)

和产量

                      string outcome
1 here-are-some-words-to-try    some
2          a-b-c-d-e-f-g-h-i       f
3            no dash in here    <NA>
Run Code Online (Sandbox Code Playgroud)