2011-10-22 31 views
1

如何仅在两个数字之间匹配选项卡?仅匹配两个数字之间的<tab>

示例脚本

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/\,/,但那也会触及空行,行结束。

回答

4

试试这个:

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

\d任何数字相匹配。 。-?的意思是“一个可选-对(转义)括号的捕获匹配,并且\1指第一捕获匹配,\2指第二

+0

它的工作原理。解释什么*那件事会做太多麻烦? (\ d是数字,相当于[0-9])? – Rook

+0

编辑了一下。 http://www.regular-expressions.info/reference.html有基础知识。 http://vimregex.com/具有特定于vim的语法和示例。 – Mat

+0

是的,知道他们以及其他一些地方。但我很少使用正则表达式,所以我大多在使用中忘记了它们。 – Rook

1

尝试

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

解释 - 查询的PATTEN <digit>\t<digit>并记住匹配<digit>的部分。
\

(... \)捕获并记住相匹配的部分。
\ 1回顾第一捕获数字,\ 2捕获的第二位。

所以如果匹配是在123\t789<digit>,<digit>比赛3\t7
3和7被rememberd如\ 1和\ 2

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

解释 - 过滤的所有行以数字,然后用逗号代替制表符

+0

它的工作原理。解释什么*那件事会做太多麻烦? – Rook

+0

希望编辑有帮助 – alvin

+0

有点。我搞砸了(或多或少)。但是,要注意的是,第二行与第一行不一样。它也用文字弄混了线条。 – Rook

1

google:// vim + regex - >http://vimregex.com/ - >

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

您在这里有两组数字([0-9])和它们之间的制表符号\t。添加一些转义符号,你有答案。 g for multichange in single line,c for some asking。 \1\2是匹配的组(您的案例中的数字)。

找到自己的问题并不是很难找到答案。

相关问题