如何仅在两个数字之间匹配标签?
示例脚本
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/\,/
,但也会触及空行和行尾。
答案 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
是匹配的组(在您的情况下为数字)。
对于像你这样的问题找到答案并不是很难。