我有一些解析某些文本的代码,而我的正则表达式表达有一个棘手的问题,由于数据不稳定,有时会捕获两件事而不是一件事。
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个匹配项。对于我的使用而言,最后一场比赛将是最重要的,但我不确定如何引用它。
答案 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"