我想使用Vim来匹配正则表达式并进行替换。我有一个包含以下内容的tsv文件:
rs11223-A -A
rs23300-G -TTA
rs9733-T -G
rs11900000-GT -TTG
我希望您能将破折号(-)替换为制表符,只在rs后的第一列中进行替换...
在Vim中,我试图使用以下命令进行替换:
:%s/(?<=^rs[0-9]{1,12})-/\t/g
有人能指出我的问题并给出正确的解决方案吗?
可能会受到配置的影响,在我的环境中,我必须在{ , }
前面加上\
。
此外,Vim有\zs
和\ze
来开始和结束匹配,因此通常不需要处理普通的正则表达式lookaround。
这样做可以实现您想要的效果:
:%s/^rs\d\{1,12}\zs-/\t/g
正向预测需要使用:
\@<=
:%s/\d\@<=-/\t/g
:%s/-/\t
rs
应该在行首出现,您可以使用\zs
来指定匹配的开始,并使用锚定(^
)::%s/^rs\d*\zs-/\t
%s/^\(rs[0-9]\{1,12\}\)-/\1\t/g
Vim正则表达式需要一些特殊的转义字符来处理 {
、}
、(
和 )
。
同时,在替换部分,你需要使用 \1
来插入匹配到的字符串。
rs
,紧接着是一个破折号(-
),前面是一个单个数字(正向零宽断言\d\@<=-
)。给定数据中的任何一行都不符合该模式。如果您坚持使用锚定,可以使用我刚添加的模式。 - heijp06