регулярное выражение - функция извлечения тела - PullRequest
1 голос
/ 15 июня 2010

в скрипте Python для каждого определения метода в некотором коде C ++ в форме:

return_value ClassName::MethodName(args)
{MehodBody} 

Мне нужно извлечь три части: имя класса, имя метода и тело метода для дальнейшей обработки. Найти и извлечь ClassName и MethodName легко, но есть ли простой способ извлечь тело метода? Со всеми возможными '{' и '}' внутри? Или регулярные выражения не подходят для такой задачи?

Ответы [ 2 ]

3 голосов
/ 15 июня 2010
>>> s = """return_value ClassName::MethodName(args)
{MehodBody {} } """
>>> re.findall(r'\b(\w+)::(\w+)\([^{]+\{(.+)}', s, re.S)
[('ClassName', 'MethodName', 'MehodBody {} ')]
1 голос
/ 15 июня 2010

Я бы порекомендовал вам использовать модуль синтаксического анализатора вместо регулярных выражений, поскольку он будет обрабатывать такие вещи, как многострочные функции, различные отступы и прерывать некорректный ввод, чтобы вы могли лучше управлять всем. «Избегайте регулярных выражений, если можете» - это одно из правил, которым я живу, поскольку они часто приносят больше хлопот, чем стоят.


Edit: Ох, ну ладно. Я неправильно понял ваш вопрос. Я думал, что вы хотите разобрать сам код Python. Я немного погуглил и нашел это , но это только C. Может быть, вы можете расширить это? Грамматика для C ++ есть в «Книге языков программирования C ++»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...