如何在vim中使用regexp交换2个数字

时间:2016-01-25 21:25:34

标签: regex vim numbers swap

我有一些看似这样的硬编码数据:

s1 = [ ...
  [-225.053,-74.050,4.801]' ...
  [-82.053,68.950,4.801]' ...
  [-82.053,-74.050,4.801]' ...
  [-82.053,-217.050,4.801]' ...
  [60.947,-74.050,4.801]' ...
  ];

我有一堆这样的条目。我意识到每个向量的前两个条目的顺序不正确,所以它不应该是[a,b,c],而应该是[b,a,c]。

我希望代码清晰,所以我想交换硬编码的值。 我如何使用regexp交换vim中的值?

2 个答案:

答案 0 :(得分:1)

找到了解决方案。假设没有空格,以下内容将起作用:

s/\(\-\?\d\+\.\d\+\),\(\-\?\d\+\.\d\+\),\(\-\?\d\+\.\d\+\)/\2,\1,\3/gc

这是这个的3倍:

\(\-\?\d\+\.\d\+\)

匹配多个[optional sign]a.b

形式

答案 1 :(得分:0)

首先,您应该知道如何交换两个值。

:%s/\(123\),\(456\)/\2,\1/

其次,您应该替换为正确的正则表达式。

[-225.053,-74.050,4.801]

这些数字被“,”分开,所以你可以使用这个

\[\(.*\),\(.*\),\(.*\)\]

所以,最后,正则表达式是

:%s/\[\(.*\),\(.*\),\(.*\)\]/[\3,\1,\2]/
相关问题