Regex 使用正则表达式查找(并替换)LaTeX表中的第n列
我有一根绳子,它是一张乳胶桌子。我试图找到第n列(比如第三列)并将所有内容包装在里面,比如说Regex 使用正则表达式查找(并替换)LaTeX表中的第n列,regex,r,Regex,R,我有一根绳子,它是一张乳胶桌子。我试图找到第n列(比如第三列)并将所有内容包装在里面,比如说\emph{},而不匹配美元符号 我正在寻找第一列&…&,它是第二列。然后找到下一个&…&,这是第二个分组,并且在表中并非巧合地是第三列 我的虚拟示例可以工作,但有点不同,因为它的文本介于两个&…&之间。有一件事我将在稍后阶段处理-我需要使用后退和转发引用将&放在\emph{}调用之外 xy <- "This is &more or less& a match and here i
\emph{}
,而不匹配美元符号
我正在寻找第一列&…&
,它是第二列。然后找到下一个&…&
,这是第二个分组,并且在表中并非巧合地是第三列
我的虚拟示例可以工作,但有点不同,因为它的文本介于两个&…&
之间。有一件事我将在稍后阶段处理-我需要使用后退和转发引用将&
放在\emph{}
调用之外
xy <- "This is &more or less& a match and here is &another one&.\nSecond line with &occurrance 1& and &occurrance 2&"
gsub("(&.*?&)|(.*?&)(.*)(&.*?&)", "\\1\\2\\3\\\\emph{\\4}", xy, perl = TRUE)
[1] "This is &more or less& a match and here is \\emph{&another one&}.\nSecond line with &occurrance 1& and \\emph{&occurrance 2&}"
假设第一列是
n,另一种方法是在调用xtable之前将列包装在emph{}
中:
data(tli)
tli[, 4] <- paste0("\\\\emph{", tli[, 4], "}")
LaTeX中是否有相同的美元符号字符$
列的结尾和下一列的开头?换句话说:0$123$456$789$0
意味着456
是第二列@Ω表行的“mega-LaTeX”结构是“col1$col2$col3\\\”,所以\\是行的结尾。没有明确的“起始行”字符。因此第一列不是以$
开头-正确吗?最后一个也不是以$
结尾…?是的,绝对正确。看我问题中的例子。前两个\hline-s之间的文本是一个列行。前导和尾随的空格字符如何?我正在努力实现这一点,请稍候。R需要\已转义,因此\\1是合适的。删除$
后,这似乎适用于第一行。有没有办法说服regex在其余的行中也这么做?如果我添加(?m)^
,匹配之前的所有内容都会消失。就是这样,我必须使用带空格的。谢谢,我明天会接受你的回答。如果其他人能够提供一个同样可以处理第一列的解决方案,我想让他们参与进来。请在您的回答中自由地包括这一点(整个gsub()
调用)。是的,这是一种可能性。然而,如果你有一个方差分析表,这是不起作用的。它们通常被传递给xtable,以便在乳胶中进行漂亮的打印,在这种情况下,必须使用xtable对象。
(?m)^(?=[^&\n\r]*&)((?:[^&]*&){n-1})\\s*([^&]*?)\\s*(&|\\\\)
↑
└ replace this n-1 with real number
input <- "% latex table generated in R 2.15.1 by xtable 1.7-0 package\n% Thu Jul 26 17:49:09 2012\n\\begin{table}[ht]\n\\begin{center}\n\\begin{tabular}{rlllr}\n \\hline\ngrade & sex & disadvg & ethnicty & tlimth \\\\ \n \\hline\n 6 & M & YES & HISPANIC & 43 \\\\ \n 7 & M & NO & BLACK & 88 \\\\ \n 5 & F & YES & HISPANIC & 34 \\\\ \n 3 & M & YES & HISPANIC & 65 \\\\ \n 8 & M & YES & WHITE & 75 \\\\ \n \\hline\n\\end{tabular}\n\\end{center}\n\\end{table}\n"
n <- 1
regex <- paste(c('(?m)^(?=[^&\n\r]*&)((?:[^&]*&){', n-1, '})\\s*([^&]*?)\\s*(&|\\\\)'), collapse='')
cat(gsub(regex, "\\1\\\\emph{\\2}\\3", input, perl = TRUE))
data(tli)
tli[, 4] <- paste0("\\\\emph{", tli[, 4], "}")
tli.table <- xtable(tli[1:5,])
x <- print.xtable(tli.table, print.results = FALSE, include.rownames = FALSE)
cat(x)
% latex table generated in R 2.15.0 by xtable 1.7-0 package
% Thu Jul 26 16:08:58 2012
\begin{table}[ht]
\begin{center}
\begin{tabular}{rlllr}
\hline
grade & sex & disadvg & ethnicty & tlimth \\
\hline
6 & M & YES & $\backslash$$\backslash$emph\{HISPANIC\} & 43 \\
7 & M & NO & $\backslash$$\backslash$emph\{BLACK\} & 88 \\
5 & F & YES & $\backslash$$\backslash$emph\{HISPANIC\} & 34 \\
3 & M & YES & $\backslash$$\backslash$emph\{HISPANIC\} & 65 \\
8 & M & YES & $\backslash$$\backslash$emph\{WHITE\} & 75 \\
\hline
\end{tabular}
\end{center}
\end{table}