用数组替换项目周围的括号

时间:2014-08-07 21:07:50

标签: regex vim

在我的文件中,我有很多行包含

之类的内容
['a', 'b', 'c']

我需要用

替换
array('a', 'b', 'c')

决定尝试弄清楚如何使用vim进行替换,但我得到的最好的方法是分别匹配[]。在一个正则表达式中执行此操作的正确方法是什么?我假设它与反向引用有关。

4 个答案:

答案 0 :(得分:3)

如果您使用捕获组。

:%s/\[\(.*\)]/array(\1)

查找方括号之间的所有内容,替换外部保留中间的内容。

答案 1 :(得分:1)

这是一个perl one-liner;在你的shell中运行它:

# Assuming entries like ['a', 'b', 'c'] are in file.txt
perl -pi -e 's/\[(.*)\]/array\($1\)/g' file.txt
# ['a', 'b', 'c'] changed to array('a', 'b', 'c') in file.txt

答案 2 :(得分:1)

另一种方法是使用Tim Pope的surround插件。

cs]farray<cr>

如下所示:cs,将]更改为函数(f),array。现在,您可以使用.在任何括号结构上重复操作。

答案 3 :(得分:-1)

使用Vim替代命令。

:%s/['a', 'b', 'c']/array('a', 'b', 'c')/g