Regex вопрос о сигнатуре метода разбора - PullRequest
2 голосов
/ 20 декабря 2010

Я пытаюсь проанализировать сигнатуру метода в следующем формате:

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

На этом этапе я хочу указать имя метода, каждый аргумент и его тип.Очевидно, я не хочу, чтобы символы <, > и т. Д. Число параметров будет переменным.

Мой вопрос: как можно получить все параметры при использовании этого регулярного выражения?Я использую Python, но я просто ищу общую идею.Нужны ли мне именованные группы и, если да, как я могу использовать их для захвата нескольких параметров, каждый со своим типом, все в одном регулярном выражении?

1 Ответ

2 голосов
/ 21 декабря 2010

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

...