最後の一致だけでなく、式のすべての一致を返す gsub 文字列を探しています。すなわち:
data <- list("a sentence with citation (Ref. 12) and another (Ref. 13)", "single (Ref. 14)")
gsub(".*(Ref. (\\d+)).*", "\\1", data)
戻り値
[1] "Ref. 13" "Ref. 14"
だから私はRefを失いました。12.
これを行うには、パッケージのstrapply
関数を使用できます。gsubfn
library(gsubfn)
data <- list("a sentence with citation (Ref. 12) and another (Ref. 13)", "single (Ref. 14)")
unlist(strapply(data,"(Ref. (\\d+))"))
どうですか
sapply(data,stringr::str_extract_all,pattern="Ref. (\\d+))")
?
gregexpr()
これは、単一の文字列から複数の参照をキャプチャする関数 (基本的にはのラッパー) です。
extractMatches <- function(data, pattern) {
start <- gregexpr(pattern, data)[[1]]
stop <- start + attr(start, "match.length") - 1
if(-1 %in% start) {
"" ## **Note** you could return NULL if there are no matches
} else {
mapply(substr, start, stop, MoreArgs = list(x = data))
}
}
data <- list("a sentence with citation (Ref. 12), (Ref. 13), and then (Ref. 14)",
"another sentence without reference")
pat <- "Ref. (\\d+)"
res <- lapply(data, extractMatches, pattern = pat)
res
# [[1]]
# [1] "Ref. 12" "Ref. 13" "Ref. 14"
#
# [[2]]
# [1] ""
(** 注 **:文字列に参照がない場合NULL
の代わりに戻る場合""
は、結果を で後処理しdo.call("c", res)
て、一致する参照のみを含む単一のベクトルを取得できます)。
私は以前に非常によく似た問題を抱えており ( http://thebiobucket.blogspot.com/2012/03/how-to-extract-citation-from-body-of.html )、これを思いつきました (実際、ベンの) 解決:
require(stringr)
unlist(str_extract_all(unlist(data), pattern = "\\(.*?\\)"))
与える:
[1] "(Ref. 12)" "(Ref. 13)" "(Ref. 14)"