gpt4 book ai didi

正则表达式在 Latex 环境之间查找和替换

转载 作者:行者123 更新时间:2023-12-04 22:26:56 26 4
gpt4 key购买 nike

我正在尝试提出一个用于查找和替换的正则表达式,以便我可以找到在 align 环境中使用的所有 '(' 字符。
示例文本:

Lorem Ipsum Lorem Ipsum Lorem Ipsum 
Lorem Ipsum Lorem Ipsum (Lorem Ipsum Lorem Ipsum )
Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum
\begin{align}
\frac{d_l}{2}< |\epsilon_H(g(m))| <\frac{d_r}{2}
\frac{d_l}{2}< |\epsilon_H(g(m))| <\frac{d_r}{2}
\end{align}
Lorem Ipsum Lorem Ipsum Lorem Ipsum
Lorem Ipsum Lorem Ipsum Lorem Ipsum

然后我想在 \begin{align}\end{align} 中找到所有的 '(' 而不是在正文中。到目前为止我有正则表达式:
(?<=\{align\})\s(.*)\s(.*)\s(?=\\end\{align\})

但这只能找到环境中的所有文本,而不是 '('.

(这背后的原因是因为我需要浏览整个文档并将方程式中的所有 '(' 更改为 ' \left( ',并且我不想更改可能使用的文本中出现的任何括号。)

最佳答案

在标量上下文中使用范围运算符 ( .. ),即作为触发器,来隔离您想要处理的块。

#!/usr/bin/perl
use strict;
use warnings;

while (<STDIN>) {
if (/^\\begin\{align\}/../^\\end\{align\}/) {
# replace all occurences of "(" with "\left("
s/\(/\\left(/g;
}
print;
}

exit 0;

使用给定的文本进行测试运行:

$ perl dummy.pl <dummy.txt
Lorem Ipsum Lorem Ipsum Lorem Ipsum
Lorem Ipsum Lorem Ipsum (Lorem Ipsum Lorem Ipsum )
Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum
\begin{align}
\frac{d_l}{2}< |\epsilon_H\left(g\left(m))| <\frac{d_r}{2}
\frac{d_l}{2}< |\epsilon_H\left(g\left(m))| <\frac{d_r}{2}
\end{align}
Lorem Ipsum Lorem Ipsum Lorem Ipsum
Lorem Ipsum Lorem Ipsum Lorem Ipsum

或作为单线:

$ perl <dummy.txt -pe 's/\(/\\left(/g if (/^\\begin\{align\}/../^\\end\{align\}/)'
...
\frac{d_l}{2}< |\epsilon_H\left(g\left(m))| <\frac{d_r}{2}
\frac{d_l}{2}< |\epsilon_H\left(g\left(m))| <\frac{d_r}{2}
...

如果块检测太严格,即在您的真实文档中 \begin\end 不在行的开头,请尝试以下不带 ^(插入符号)的操作:

 if (/\\begin\{align\}/../\\end\{align\}/) {

关于正则表达式在 Latex 环境之间查找和替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54733228/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com