从R

时间:2017-06-26 20:53:06

标签: r string latex

我想提取tex文件中引用的所有引用。下面是一个例子:

cat("...", "Some author \\cite{xxx}", "Other author \\cite{yyy}, more text \\cite{zzz}",
        "...}", file = "tex", sep="\n")
tex <- readLines("tex")   

预期输出为:

refs <- c("xxx","yyy","zzz")

我在grep中冒险但没有任何成功。因此,我很高兴在这里收到建议。

1 个答案:

答案 0 :(得分:2)

您可以先检查每一行,看它是否包含cite,然后使用sub从引用中提取作者并返回参考:

hasCite <- grepl("\\\\cite", tex)
sub(".*\\\\cite\\{(.*?)\\}.*", "\\1", tex[hasCite])
# [1] "xxx" "yay"

更新

如果字符串中有多个匹配项,则可以使用stringr::str_extract_all;这里使用 regex 环顾(?<=...)(向后看)和(?=)(向前看)来限制模式,以便提取\\cite{}包围的内容:

library(stringr)
unlist(str_extract_all(tex, "(?<=\\\\cite\\{)(.*?)(?=\\})"))
# [1] "xxx" "yyy" "zzz"