4

最後の一致だけでなく、式のすべての一致を返す 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.

4

4 に答える 4

7

これを行うには、パッケージのstrapply関数を使用できます。gsubfn

library(gsubfn)

data <- list("a sentence with citation (Ref. 12) and another (Ref. 13)", "single (Ref. 14)") 
unlist(strapply(data,"(Ref. (\\d+))"))
于 2012-04-18T20:13:13.003 に答える
6

どうですか

sapply(data,stringr::str_extract_all,pattern="Ref. (\\d+))")

?

于 2012-04-18T18:44:12.323 に答える
4

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)て、一致する参照のみを含む単一のベクトルを取得できます)。

于 2012-04-18T18:03:52.047 に答える
2

私は以前に非常によく似た問題を抱えており ( 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)"
于 2012-04-18T19:49:18.867 に答える