我有一条如下所示的行。双引号括起来的字符串
fullname =(这是一个测试名称);
我想双引号“(”和“)”中的所有字符串。
即fullname =(“this”“is”“a”“test”“name”);
有人可以给我一个vim正则表达式来做到这一点吗?
我有一条如下所示的行。双引号括起来的字符串
fullname =(这是一个测试名称);
我想双引号“(”和“)”中的所有字符串。
即fullname =(“this”“is”“a”“test”“name”);
有人可以给我一个vim正则表达式来做到这一点吗?
该做的:
:%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不对实际上支持可变长度向后看。大多数现代正则表达式实现不。
该命令使一切这是不空格,制表符,等号,括号或分号报价:
:s/[^ \t=();][^ \t=();]*/"&"/g
请注意,此报价fullname
为好,但你可以手动删除这些报价。
有时候手工完成部分工作是值得的,因为自动化会更慢。
运行命令:
:help substi
,以获取有关vim的正则表达式替换的帮助。
我会做如下:
:s/\<\w\+\>/"&"/gc
由于确认开关“C”,你会被要求每次更换。 回答'n'(no)代替行的其余部分的'全名'和'a'(全部)。
@pts,我想不想任何手动删除 – chappar 2009-05-02 07:55:26
不工作。这将所有内容都包含在引号中。 – Tomalak 2009-05-02 07:58:47
我认为它的工作原理与答案相同,我在提交答案之前已经尝试过。 “一切”是什么意思? – pts 2009-05-02 08:26:54