双引用括号内的字符串

时间:2009-05-02 07:47:43

标签: regex vim

我有一条如下所示的行。

fullname =(这是测试名称);

我想双引号“(”和“)”中的所有字符串。

即fullname =(“this”“is”“a”“test”“name”);

有人可以给我一个vim正则表达式吗?

3 个答案:

答案 0 :(得分:4)

我会这样做:

:s/\<\w\+\>/"&"/gc

由于确认开关'c',您将被要求进行每次更换。 回答'n'(否)替换'fullname'和'a'(all)替换该行的其余部分。

答案 1 :(得分:3)

这样做:

:%s/\v(\(.*)@<=[[:alnum:]]+(.*\))@=/"&"/g

请注意,如果输入格式错误,将匹配的嵌套模式(如括号中)与正则表达式匹配将会出错。上面根本不处理嵌套括号,引用或转义括号也会破坏它。小心处理。

内容如下:

:%s               substitute on all lines
/                 matching
\v                (with "very magic" switched on)
(\(.*)@<=         a position that follows an opening paren, on this line
[[:alnum:]]+      a series of alphanumeric characters (i.e. "words")
(.*\))@=          that are followed by a closing paren, on this line
/                 replace with
"&"               the match, in quotes
/g                globally

值得注意的是,vim确实支持可变长度的后视。大多数现代正则表达式实现都没有。

答案 2 :(得分:0)

此命令将所有不是空格,制表符,等号,paren或分号的内容放入引号:

:s/[^ \t=();][^ \t=();]*/"&"/g

请注意,此引用fullname,但您可以手动删除这些引号。

有时值得手动完成部分工作,因为自动化会更慢。

运行命令:

:help substi

在vim中获取关于regexp替换的帮助。