我正在尝试修改一些LaTeX Beamer代码,并希望快速正则表达式找到定义代码块的特定模式。例如,在
中\only{
\begin{equation*}
\psi_{w}(B)(1-B)^{d}y_{t,w} = x^{T}_{t,w}\gamma_{w} + \eta_{w}(B)z_{t,w},
\label{eq:gen_arima}
\end{equation*}
}
我想仅匹配\only{
和最终}
,而不是其他任何内容,以便将其删除。这甚至可能吗?
答案 0 :(得分:2)
正如在这个着名的SO回答中所表达的那样,正则表达式无法计算:RegEx match open tags except XHTML self-contained tags
另外,LaTeX本身有一个相当复杂的语法(即宏扩展?)。理想情况下,您使用某种解析器,但也许这有点过分。如果您正在寻找一个非常简单,快速和肮脏的黑客,它只适用于某类投入,您可以:
\only
。counter
时增加{
,并在每次看到}
时减少\
。如果{
之前有\
,请忽略它。 (如果你寻找一个奇数的counter
,那就很奇怪。)}
达到0时,您已找到结束IndexError
。同样,这是不可靠。
答案 1 :(得分:1)
I want to remove \only{ and }, and keep everything within it
在PCRE(php),Perl,Notepad ++上,它是这样做的:
对于像这样简单的事情,你需要的只是你
查找\\only\s*({((?:[^{}]++|(?1))*)})
替换$2
https://regex101.com/r/U3QxGa/1
解释
\\ only \s*
( # (1 start)
{
( # (2 start), Inner core to keep
(?: # Cluster group
[^{}]++ # Possesive, not {}
| # or,
(?1) # Recurse to group 1
)* # End cluster, do 0 to many times
) # (2 end)
}
) # (1 end)