2017-06-26 33 views
1

我想提取tex文件中引用的所有參考文獻。下面的例子:從R中的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的冒險沒有成功。因此,我很樂意在這裏收到建議。

回答

2

您可以先檢查每一行,看它是否含有cite,然後提取筆者從使用sub和反向引用引用:

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

更新

如果你有多個匹配在字符串中,您可以使用stringr::str_extract_all;這裏使用正則表達式看看周圍(?<=...)(看後面)和(?=)(向前看),以便通過\\cite{}包圍內容將提取限制模式:

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

謝謝您的回答,你居然解決了我的例子。但是,我自己的錯誤是,您的解決方案不會捕獲具有多個參考的TeX線。我已經適應了我的例子,並對其進一步的建議將不勝感激。 – user3091668