2

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

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

由此,我想要方法的名称、每个参数及其类型。显然我不想要<,>字符等。参数的数量是可变的。

我的问题是:使用此正则表达式时如何获取所有参数?我正在使用 Python,但我只是在寻找一个总体思路。我是否需要命名组,如果需要,如何使用它们在一个正则表达式中捕获多个参数,每个参数都有它的类型?

4

1 回答 1

2

您无法使用 Python 正则表达式匹配可变数量的组(请参阅)。相反,您可以使用正则表达式和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+如果您的格式不是很严格,您应该通过在标识符之间添加来允许它。

于 2010-12-20T21:04:26.173 回答