我正在尝试解析这种格式的方法签名:
'function_name(foo=<str>, bar=<array>)'
由此,我想要方法的名称、每个参数及其类型。显然我不想要<
,>
字符等。参数的数量是可变的。
我的问题是:使用此正则表达式时如何获取所有参数?我正在使用 Python,但我只是在寻找一个总体思路。我是否需要命名组,如果需要,如何使用它们在一个正则表达式中捕获多个参数,每个参数都有它的类型?
我正在尝试解析这种格式的方法签名:
'function_name(foo=<str>, bar=<array>)'
由此,我想要方法的名称、每个参数及其类型。显然我不想要<
,>
字符等。参数的数量是可变的。
我的问题是:使用此正则表达式时如何获取所有参数?我正在使用 Python,但我只是在寻找一个总体思路。我是否需要命名组,如果需要,如何使用它们在一个正则表达式中捕获多个参数,每个参数都有它的类型?
您无法使用 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+
如果您的格式不是很严格,您应该通过在标识符之间添加来允许它。