我的文件包含abc(de + fgh(2a + 2b))+ xyz()。我想写regexp(最好是vim)来得到像de + fgh(2a + 2b)+ xyz()这样的模式。
我尝试使用gvim regexp但是在匹配括号时,如果我使用贪婪选项,它将匹配abc(de + fgh(2a + 2b))+ xyz()对于非贪婪选项,它将与abc(de + fgh(2a + 2b')')+ xyz()匹配,如何与abc匹配(de + fgh(2a + 2b)' )'+ XYZ()。
此致 keerthan
答案 0 :(得分:1)
我不会用正则表达式来做,假设你的光标处于BOL状态,只需执行:
%di(v0p
你将获得所需的输出。
将其翻译成英文,将第一个(..)
组之间的内容与第一个(...)
组之后的内容联系起来。
您可以使用:normal
cmd或宏在多行上应用操作。
答案 1 :(得分:0)
小心!正则表达式无法处理任意数量的括号。如果你想这样做,你可能需要编写一个解析器。
那就是说,如果您只需要这个来处理特定情况: http://regexr.com/3fne0
在vim中这是:
%s/[^()]*(\([^()]*([^()]*)\))\(.*\)/\1\2/g