Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用Vim进行断言和替换后的积极展望?_Regex_Vim - Fatal编程技术网

Regex 用Vim进行断言和替换后的积极展望?

Regex 用Vim进行断言和替换后的积极展望?,regex,vim,Regex,Vim,我想使用Vim匹配正则表达式并执行替换。我有一个tsv文件,其中的行如下所示: rs11223-A -A rs23300-G -TTA rs9733-T -G rs11900000-GT -TTG 我希望用破折号(-)字符代替rs后第一列中的制表符 在Vim中,我试图使用以下方法执行替换: :%s/(?<=^rs[0-9]{1,12})-/\t/g :%s/(?它可能取决于配置,但在我的环境中,我必须在{,}前面加上\ 另外,V

我想使用Vim匹配正则表达式并执行替换。我有一个tsv文件,其中的行如下所示:

rs11223-A        -A
rs23300-G        -TTA
rs9733-T          -G
rs11900000-GT    -TTG
我希望用破折号(-)字符代替rs后第一列中的制表符

在Vim中,我试图使用以下方法执行替换:

:%s/(?<=^rs[0-9]{1,12})-/\t/g   

:%s/(?它可能取决于配置,但在我的环境中,我必须在
{,}
前面加上
\

另外,Vim有
\zs
\ze
来开始和结束匹配,因此通常不需要处理普通的正则表达式查找

这正是您想要的:

:%s/^rs\d\{1,12}\zs-/\t/g

您需要以下内容:

%s/^\(rs[0-9]\{1,12\}\)-/\1\t/g
Vim正则表达式需要一些特殊的转义序列,用于
{
}


另外,在替换部分,您需要插入匹配的字符串。

使用以下方法完成正向查找:

\@<=
如果
rs
应位于行的开头,则可以使用
\zs
指定匹配的开头并使用锚定(
^
):


使用lookback的正确表达式是:

%s/\(\d\+\)\@<=-/\t/gc 

%s/\(\d\+\)\@\35; 2必须是:%s/^rs\d\@@KomodoDave:您的模式将在行首匹配
rs
,紧接着是一个破折号(
-
),前面是一位数字(正面看后面的
\d@我以为OP是字符列的意思,但他可能不是。我复制了你的内容来编辑它,并没有按照我的意图将\d替换为我想写的内容::%s/^rs-\@
:%s/-/\t
:%s/^rs\d*\zs-/\t
%s/\(\d\+\)\@<=-/\t/gc