【发布时间】:2016-02-10 00:51:54
【问题描述】:
由于 pandoc-citeproc 和 latex 之间的转换,我想替换它
[@Fotheringham1981]
有了这个
\cite{Fotheringham1981}
.
下面的可重现示例说明了单独处理每个括号的问题。
x <- c("[@Fotheringham1981]", "df[1,2]")
x1 <- gsub("\\[@", "\\\\cite{", x)
x2 <- gsub("\\]", "\\}", x1)
x2[1] # good
## [1] "\\cite{Fotheringham1981}"
x2[2] # bad
## [1] "df[1,2}"
在 C# 中看到了类似的问题 solved,但没有使用 R 的 perly 正则表达式 - 有什么想法吗?
编辑:
它应该能够处理长文档,例如
old_rmd <- "$p = \alpha e^{\beta d}$ [@Wilson1971] and $p = \alpha d^{\beta}$
[@Fotheringham1981]."
new_rmd1 <- gsub("\\[@([^\\]]*)\\]", "\\\\cite{\\1}", old_rmd, perl = T)
new_rmd2 <- gsub("\\[@([^]]*)]", "\\\\cite{\\1}", old_rmd)
new_rmd1
## "$p = \alpha e^{\beta d}$ \\cite{Wilson1971} and $p = \alpha d^{\beta}$\n \\cite{Fotheringham1981}."
new_rmd2
## [1] "$p = \alpha e^{\beta d}$ \\cite{Wilson1971} and $p = \alpha d^{\beta}$\n\\cite{Fotheringham1981}."
【问题讨论】:
-
正则表达式可以做相反的事情!