从字符串中获取正则表达式中的所有匹配项作为搜索结果 (/<regexp>)



所以我正在寻找一种方法来获得像这样定义的函数(在Python中)的所有参数

def a_function(param1, param2="foo", somethingelse):

我做了一个正则表达式(对不起你的眼睛,我不太擅长正则表达式),如果我在vim(/regexp)中使用研究,它会匹配所有参数

(def[[:blank:]]+[_[:alnum:]]+[[:blank:]]*(.*)@<=([_[:alnum:]]+[[:blank:]]*=@=|[_[:alnum:]]+[[:blank:]]*,@=|(,[[:blank:]]*)@<=[_[:alnum:]]+)(.*):)@=

我尝试使用不同配置的函数,如matchlistmatchmatchstrmatchend(在循环中尝试一些疯狂的matchmatchstrmatchend),但没有成功。

有没有一种方法可以在vimscript中的列表中获得与正则表达式匹配的所有单词?

如果可能的话,我真的想保留这个正则表达式。

您可以使用替换并使用=来收集匹配项。

:let lst = []
:%s/^s*zsdefs+.*):zes*$/=add(lst, submatch(0))/n

注意:这会更改搜索寄存器。

按照@Christian Brabandt的建议使用n标志将阻止对缓冲区进行更改。

我还简化了正则表达式,以搜索以def开头、以): 结尾的行

有关更多信息,请参阅:

:h :s
:h :s/=
:h /zs
:h :s_flags

最新更新