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

时间:2010-12-20 20:52:41

标签: python regex method-signature

我正在尝试解析这种格式的方法签名:

'function_name(foo=<str>, bar=<array>)'

从这里,我想要方法的名称,以及每个参数和它的类型。显然我不想要<>字符等。参数的数量是可变的。

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

1 个答案:

答案 0 :(得分:2)

您无法将可变数量的组与Python正则表达式匹配(请参阅this)。相反,您可以使用正则表达式和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')])

这将匹配变量数(包括0)参数。我选择不允许额外的空格,但如果您的格式不是很严格的话,您应该在标识符之间添加\s+来允许它。