Regex vim替代分支中的子匹配

Regex vim替代分支中的子匹配,regex,vim,Regex,Vim,我希望使用多个分支进行搜索,并从匹配的分支中获取子匹配以用于替换 对于这个特定的问题,我想获取完全由“=”或“-”(较小的子集)中的一个字符组成的任何行,其中至少有3个字符,每个字符的空格条件不同 因此,我使用以下表达式来匹配它们: ^\t\(=\)\{3,}\_$\|[ ]\{5,}^\(-\)\{3,}\_$ 我接下来要做的是在替换中使用子匹配。我想我可以这么做: :.s/^\t\(=\)\{3,}\_$\|[ ]\{5,}^\(-\)\{3,}\_$/apple\1banana/e 但

我希望使用多个分支进行搜索,并从匹配的分支中获取子匹配以用于替换

对于这个特定的问题,我想获取完全由“=”或“-”(较小的子集)中的一个字符组成的任何行,其中至少有3个字符,每个字符的空格条件不同

因此,我使用以下表达式来匹配它们:

^\t\(=\)\{3,}\_$\|[ ]\{5,}^\(-\)\{3,}\_$
我接下来要做的是在替换中使用子匹配。我想我可以这么做:

:.s/^\t\(=\)\{3,}\_$\|[ ]\{5,}^\(-\)\{3,}\_$/apple\1banana/e

但它似乎只有在第一个分支(带有“=”)匹配时才起作用,而不是第二个分支。我怎样才能做到这一点?我正在寻找一种解决方案,它允许我使用20个分支,并且仍然能够从匹配的分支获取子匹配。

据我所见,您不需要组。这似乎与您的命令工作相同(我没有要测试的示例):

这将把所有[-=]放入替换中:

:.s/^\t\zs=\{3,}$\|^[ ]\{5,}\zs-\{3,}$/apple&banana/e

如果您可以共享需要编辑的文本样本和预期结果,则可以更轻松地测试我写的内容是否有效。

您可以使用零宽度模式和反向引用来完成此操作:

\(\%(^\t\)\@<==\{3}\|\%([ ]\{5,}^\)\@<=-\{3}\)\_$

对不起,是的,你完全正确,我会试着把一些东西组合起来。我正在为vim编写一个插件,不想让事情变得复杂:P
\(\%(^\t\)\@<==\{3}\|\%([ ]\{5,}^\)\@<=-\{3}\)\_$
:.s/^\t\(=\)\{3,}\_$\|[ ]\{5,}^\(-\)\{3,}\_$/apple\1\2banana/e