Об этом уже спрашивали, но у меня есть специальный случай, который я смогу обработать с помощью регулярного выражения.
Я пытаюсь прочитать журнал предупреждений из Doxygen, и источник находится в C (до сих пор я боюсь думать о C ++).
Мне нужно сопоставить функции и определения переменных, найденные в этом журнале, и подобрать имена функций и переменных.
Более конкретно, журнал имееттакие строки, как
/home/me/blaa.c:10:Warning: Member a_function(int a, int b) (function) of file blaa.c is not documented
и
/home/me/blaa.h:10:Warning: Member a_variable[SOME_CONST(sizeof(SOME_STRUCT), 64)*ANOTHER_CONST] (variable) of file blaa.h is not documented
Со всеми вариациями, которые вы можете иметь в C ...
Могу ли я сопоставить эти варианты только с одним регулярным выражением или я должендаже не беспокоить?Слово в списке после «параметра» (я использую его свободно, чтобы включить переменные) в скобках - это набор определенных слов (функция, переменная, перечисление и т. Д.), Поэтому, если больше ничего не помогает, я могу сопоставить их сЯ бы предпочел, если бы в журналах были типы, которых я еще не видел.
Моя текущая попытка выглядит как
'(?P<full_path>.+):\d+:\s+Warning:\s+Member\s+(?P<member_name>.+)([\(\[](\**)\s*\w+([,)])[\)\]))*\s+\((?P<member_type>.+)\) of file\s+(?P<filename>.+)\s+is not documented'
(я использую пакет Python re.)
Но все равно не удается поймать все.
РЕДАКТИРОВАТЬ: Там есть какая-то ошибка, которую я сделал в последнем редактировании.