我可以找到表达式,但我不想替换它的所有内容(vim中的正则表达式)

时间:2015-02-02 10:36:19

标签: regex vim

我已经尝试了一段时间,但我无法弄清楚:我的文字看起来像那样:

xxx "fy1":
    xxx.xxx = fy;
    xxx;
xxx "tm1":
    xxx.xxx = tm;
    xxx;
...

我希望它看起来像那样:

xxx "fy1":
    xxx.xxx = fy1;
    xxx;
...

我的问题是,我可以找到所有出现的地方,我想要放置一个" 1"与

s/[ft][ymdhi];/???/g

但是我在问号处放置的所有内容也取代了字母。我唯一想做的就是在这两个字母之后加一个数字。

我想到了

\w{2}

在搜索字符串中,但是在分号之前找到两个字母的所有内容,所以我想我需要

[ft][ymdhi]

提前致谢!

2 个答案:

答案 0 :(得分:3)

您可以创建捕获组,以便在替换时引用匹配的文本。或者,您可以使用vim的\zs来保留一些匹配的文本,例如 这条线完成了这项工作:

%s/[ft][ymdhi]\zs;/1;/g

:h \zs and :h \ze了解详情

如果也将\ze添加到此示例中,则为:

%s/[ft][ymdhi]\zs\ze;/1/g

它也有效。

答案 1 :(得分:2)

您希望将\(...\)\1一起使用:

:%s/\([ft][ymdhi]\);/\11;/

转义的paranthes \(...\) store 在paranthesis之间匹配的内容。以后可以使用\1再次使用存储的文本。

在你的情况下,\11与11只没有任何关系,只是巧合的是你用括号记住的文字后跟1