Vim中如何限制关键词匹配次数并删除指定区间内容?
解决Vim中的文本匹配与删除问题
一、删除第1个“thu”到第3个“thu”之间内容的命令
要删除每行中第1个到第3个“thu”之间的内容,可使用以下全局替换命令:
:%s/thu\(.*\)thu\(.*\)thu/thu thu/g
:%s/表示对所有行执行替换操作thu\(.*\)thu\(.*\)thu依次匹配第1个thu、中间任意内容、第2个thu、中间任意内容、第3个thuthu thu为替换结果,保留首尾的thu并删除中间部分/g表示每行内所有符合规则的匹配都执行替换
如果仅处理当前行,去掉%即可:
:s/thu\(.*\)thu\(.*\)thu/thu thu/g
二、限制正则匹配次数的方法
Vim默认的.*是贪婪匹配,会匹配到最远的目标关键词,可通过两种方式限制匹配范围:
1. 非贪婪匹配
用\{-}代替*实现非贪婪匹配,会匹配到最近的下一个目标关键词:
thu.\{-}thu
这个模式只会匹配从第一个thu到紧邻它的下一个thu的内容。
2. 精确指定匹配次数
通过分组计数精确匹配到第N个目标关键词,比如要匹配第1个到第3个thu,可写成:
thu\(.\{-}thu\)\{2}
其中\{2}表示前面的分组(.\{-}thu)仅匹配2次,整体就会锁定第1个到第3个thu的范围。
内容的提问来源于stack exchange,提问作者Harshil Gajjar
相关产品推荐
相关产品推荐

