如何在VIM中搜索不匹配的模式

4
这是我的.py文件的一部分内容:
for i in range(1,nxs-2):
    for j in (1, nts-2):
        dg_cc(dg,sina,cosa,s,r2tanb,omega,L,n,m,xs[i],ts[k],pd)
        dot( dg,F,c1,transa=T )
        dot( c1, dg, ansK1, N, N, alpha=2., beta=1. )
        # linear buckling part
        g = g_cc(m,n,L,xs[i],ts[j],pd)
        Bg = fBg(Bg,cosa,s,L,m,n,xs[i],ts[i],pd)
        dot( g, Bg, ansK1, T, N, alpha=2., beta=1. )
        #
        if pd:
            fdg0(dg0,sina,cosa,s,r2tanb,omega,L,xs[i],ts[j])
            dot( dg0, F, c2, transa=T )
            dot( c2, dg, ansK0, N, N, alpha=2., beta=1. )
for i in (1, nxs-2):
    for j in range(1,nts-2):
        dg_cc(dg,sina,cosa,s,r2tanb,omega,L,n,m,xs[i],ts[n],pd)
        dot( dg,F,c1,transa=T )
        dot( c1, dg, ansK1, N, N, alpha=2., beta=1. )
        # linear buckling part
        g = g_cc(m,n,L,xs[i],ts[j],pd)
        Bg = fBg(Bg,cosa,s,L,m,n,xs[i],ts[j],pd)
        dot( g, Bg, ansK1, T, N, alpha=2., beta=1. )

我需要修复所有错别字,只保留ts[j]并使用ts[i]ts[n]来修复这些错误。例如。
我该如何构建我的搜索模式以便在ts[something] something NOT equal j的任何地方进行搜索?

你打算一次性执行搜索/替换操作,例如 :%s,还是先构建搜索模式,然后手动修复它们?此外,我在你的代码中没有看到任何 ts[],只有 xs[] - Michael Berkowski
只需手动构建搜索模式并替换,因为有些情况我想保留,例如 ts[0](在示例中未显示)... - Saullo G. P. Castro
3个回答

8

你可以尝试一下,看看它是否符合你的要求?

/ts\[[^j]\]

而且如果内部变量可能不止一个字符,那么 [^j]+ - Michael Berkowski
你只需要转义第一个方括号,整个内容就不会被视为字符类。 - FDinoff
太好了! :) 谢谢!VIM很棒!您会推荐哪个地方供初学者学习正则表达式? - Saullo G. P. Castro
1
@SaulloCastro 在互联网上有一些不错的正则表达式教程。阅读它们,尝试一些例子。重要的是在阅读和理解后使用它。否则你会忘记它。 - Kent

5
如果您想否定的模式超过一个字符,则可以使用负向先行断言。它会在模式不匹配当前位置时匹配。
/ts\[\(j\)\@!.\{-}]

或者用非常神奇的方式
/\vts\[(j)@!.{-}]

如果在这种情况下,在@!之前被否定的模式是j.{-}是一种非贪婪匹配,用于匹配直到下一个方括号的所有内容。


2
@SaulloCastro 它更复杂,但也更强大。其他答案只是否定一个字符类,即否定单个字母。而这个方法可以否定您想要的任何模式。 - FDinoff

1
以下内容适用于您:
/ts[[][^j]]

或者转义 [
/ts\[[^j]]

这个也行...谢谢!您会推荐哪里给初学者学习正则表达式呢? - Saullo G. P. Castro
1
Wikipedia的文章应该作为一个很好的起点。 - devnull

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接