我有一条如下所示的行。
fullname =(这是测试名称);
我想双引号“(”和“)”中的所有字符串。
即fullname =(“this”“is”“a”“test”“name”);
有人可以给我一个vim正则表达式吗?
答案 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替换的帮助。