仅引用R中str_extract_all中的最后一个匹配项

时间:2018-11-07 13:34:09

标签: r string tidyverse

我有一些解析某些文本的代码,而我的正则表达式表达有一个棘手的问题,由于数据不稳定,有时会捕获两件事而不是一件事。

temp <- "abc abcdef"
library(stringr)
str_extract_all(temp,"ab.+")
[[1]]
[1] "abc abcdef"

str_extract_all(temp,"ab.+")[[1]][2]
[1] NA

以上是我正在处理的一个简单示例。当我应用此功能时,我可能会得到1,2或3个匹配项。对于我的使用而言,最后一场比赛将是最重要的,但我不确定如何引用它。

3 个答案:

答案 0 :(得分:2)

据我了解,您的意思是

txt <- "bag of flour"
str_extract_all(txt, "\\b[a-z]+\\b")
# [[1]]
# [1] "bag"   "of"    "flour"

并指“面粉”。在这种情况下,您可以使用

tail(str_extract_all(txt, "\\b[a-z]+\\b")[[1]], 1)
# [1] "flour"

答案 1 :(得分:1)

您可以使用例如:

str_extract_all(temp,"ab.+")[[length(str_extract_all(temp,"ab.+"))]]

答案 2 :(得分:1)

不太优雅,但是可以完成工作:

. <- str_extract_all(temp,".*?(?=(ab)|$)")[[1]]
paste0("a",.[[length(.)-1]])
# [1] "abcdef"

或者如果您的输出只能是一个单词,也许您想要这样的事情?

. <- str_extract_all(temp,"\\bab.+?\\b")[[1]]
dplyr::last(.)
#[1] "abcdef"