仅匹配两个数字之间的<tab> </tab>

时间:2011-10-22 12:57:43

标签: vim

如何仅在两个数字之间匹配标签?

示例脚本

209.65834   27.23204908
119.37987   15.03317082
74.240635   8.30561924
29.1014 0

931.8861    -100.00000
-16.03784   -8.30562
;   
_mirror 
l   

;   
29.1014 0
1028.10 0.00
n   
_spline 
935.4875    250
924.2026913 269.8820375
912.9178825 277.4506484
890.348265  287.3181854

(在上面的脚本中,标签位于数字之间,而不是空格之间)(空行很重要;它们中没有任何内容,但我不能丢失它们)

我希望在数字之间得到一个“,”。试过:%s/\t/\,/,但也会触及空行和行尾。

3 个答案:

答案 0 :(得分:4)

试试这个:

:%s/\(\d\)\t\(-\?\d\)/\1,\2/

\d匹配任何数字。 -?表示“可选-。这对(转义)括号捕获匹配,\1表示第一个捕获的匹配,\2表示第二个。< / p>

答案 1 :(得分:1)

尝试

:%s/\([0-9]\)\t\([0-9]\)/\1,\2/g

说明 - 搜索模式<digit>\t<digit>并记住匹配<digit>的部分 \(... \)捕获并记住匹配的部分 \ 1召回第一个捕获的数字,\ 2记录第二个捕获的数字。

因此,如果匹配在123\t789,则<digit>,<digit>3\t7匹配   3和7被记为\ 1和\ 2

:g/[0-9]/    s/\t/,/g

说明 - 使用数字过滤所有行,然后在这些行上用逗号替换制表符

答案 2 :(得分:1)

google:// vim + regex - &gt; http://vimregex.com/ - &gt;

:%s/\([0-9]\)\t\([0-9]\)/\1,\2/gc

这里有两组数字([0-9])和标签符号\t。添加一些转义符号,你就有了答案。 g表示单行多行,c表示有问题。 \1\2是匹配的组(在您的情况下为数字)。

对于像你这样的问题找到答案并不是很难。