Python 关于解析方法签名的正则表达式问题

Python 关于解析方法签名的正则表达式问题,python,regex,method-signature,Python,Regex,Method Signature,我正在尝试分析以下格式的方法签名: 'function_name(foo=<str>, bar=<array>)' “函数名(foo=,bar=)” 由此,我需要方法的名称、每个参数及其类型。显然,我不想要字符等。参数的数量是可变的 我的问题是:使用这个正则表达式时,如何获得所有参数?我正在使用Python,但我只是在寻找一个大概的想法。我需要命名组吗?如果需要,我如何使用它们捕获多个参数,每个参数都有它的类型,都在一个正则表达式中?您无法将可变数量的组与Python

我正在尝试分析以下格式的方法签名:

'function_name(foo=<str>, bar=<array>)'
“函数名(foo=,bar=)”
由此,我需要方法的名称、每个参数及其类型。显然,我不想要
字符等。参数的数量是可变的


我的问题是:使用这个正则表达式时,如何获得所有参数?我正在使用Python,但我只是在寻找一个大概的想法。我需要命名组吗?如果需要,我如何使用它们捕获多个参数,每个参数都有它的类型,都在一个正则表达式中?

您无法将可变数量的组与Python正则表达式匹配(请参阅)。相反,您可以使用regex和
split()
的组合

名称,args=re.match(r'(\w+)\(.*),“函数名(foo=,bar=,baz=))。组() >>>args=[re.match(r'(\w+)=',arg.groups(),用于args.split(',')中的arg] >>>名称,args ('function_name',[('foo','str'),('bar','array'),('baz','int'))
这将匹配一个变量数(包括0)参数。我选择了不允许额外的空白,尽管如果格式不是很严格,您应该通过在标识符之间添加
\s+
来允许它。

仔细想想,这是行不通的。参数部分只允许2个参数,不能多也不能少。这正是我一开始遇到的问题。我可以将多个相同模式与
*
等匹配,但我无法将多个值捕获到组中(如果不连续手动键入同一组regex 15次,这一点都不干净)。@orokusaki好的,似乎单用一个regex是不可能的。请参阅我的新答案,它将正则表达式与
split()
结合在一起。它将适用于任何数字,测试它。
>>> name, args = re.match(r'(\w+)\((.*)\)', 'function_name(foo=<str>, bar=<array>, baz=<int>)').groups()
>>> args = [re.match(r'(\w+)=<(\w+)>', arg).groups() for arg in args.split(', ')]
>>> name, args
('function_name', [('foo', 'str'), ('bar', 'array'), ('baz', 'int')])