regex 仅当不在上下文中时才匹配正则表达式

bbuxkriu  于 2023-08-08  发布在  其他
关注(0)|答案(1)|浏览(82)

引擎:Vim RegEx
输入:

\begin{thoerm}\label{ABC_for_all}
    If the ABC is a common good, $ABC(places)$ includes everything.
\end{thorem}

We will now prove Threorem \ref{ABC_for_all}.

字符串
表达式:

(?<!(\\label|\\ref)\{\w*)ABC(?!\w*\})


预期:
我想匹配(并在neovim中替换)“ABC”,但前提是它不是名称的一部分(因此不是在\label{...}或\ref{...}上下文中)。
测试结果:
不管用
我知道如何替换它,如果它发生在上下文中:

:s/(\\label\{\w*)ABC(\w\})*/\1alphaber\2/g


但不是它之外的事件。
Lookahead不起作用,因为ABC可能出现在label命令中的某个地方,因此我需要可变宽度。我也想不出如何把一个捕捉组变成实际的比赛。这似乎是一个很常见的案例,但到目前为止我发现的所有东西都不包括它。

5cnsuln7

5cnsuln71#

由于我被告知这在正则表达式中是不可能的,我的解决方法如下:
1.用某个MARKER重命名指定上下文中的所有内容。
1.取代其他一切。
1.用原始标记替换标记。
每次都使用regex。

相关问题