Нельзя сопоставить переменное число групп с регулярными выражениями 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+
между идентификаторами, если ваш формат не очень строгий.