Regex 使用正则表达式查找(并替换)LaTeX表中的第n列

Regex 使用正则表达式查找(并替换)LaTeX表中的第n列,regex,r,Regex,R,我有一根绳子,它是一张乳胶桌子。我试图找到第n列(比如第三列)并将所有内容包装在里面,比如说\emph{},而不匹配美元符号 我正在寻找第一列&…&,它是第二列。然后找到下一个&…&,这是第二个分组,并且在表中并非巧合地是第三列 我的虚拟示例可以工作,但有点不同,因为它的文本介于两个&…&之间。有一件事我将在稍后阶段处理-我需要使用后退和转发引用将&放在\emph{}调用之外 xy <- "This is &more or less& a match and here i

我有一根绳子,它是一张乳胶桌子。我试图找到第n列(比如第三列)并将所有内容包装在里面,比如说
\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}