За этим вопросом стоит попытка извлечь все ссылки, созданные knitr
и latex
. Не найдя другого пути, я решил прочитать в R скрипт .Rnw и использовать регулярное выражение для поиска ссылок, где синтаксис латекса \ref{caption referenced to}
. В моем сценарии более 250 ссылок, и некоторые из них очень близки друг к другу.
Пример text.1 ниже работает, но не текстовый пример. Я думаю, это связано с тем, что R пыхтит до последней закрывающей скобки. Как мне остановиться на первой закрывающей скобке и извлечь то, что предшествовало ей, в открывающую скобку?
library(stringr)
text.1 <- c(" \\ref{test}", "abc", "\\ref{test2}", " \\section{test3}", "{test3")
# In the regular expression below, look back and if find "ref{", grab everything until look behind for } at end
# braces are special characters and require escaping with double backslacs for R to recognize them as braces
# unlist converts the list returned by str_extract to a vector
unlist(str_extract_all(string = text.1, pattern = "(?<=ref\\{).*(?=\\}$)"))
[1] "test" "test2"
# a more complicated string, with more than one set of braces in an element
text <- c("text \ref{?bar labels precision} and more text \ref{?table column alignment}", "text \ref{?table space} }")
unlist(str_extract_all(string = text, pattern = "(?<=ref\\{).*(?=\\}$)"))
character(0)