以前曾经问过,但我有一个专门的案例,我应该能够用正则表达式处理。
我正在尝试从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的重新包。)
但它仍然无法捕捉到一切。
编辑:我在上一次编辑中遇到了一些错误。答案 0 :(得分:1)
您允许在<member_name>
和<member_type>
之间进行零次或多次匹配。试试这个:
'(?P<full_path>.+):\d+:\s+Warning:\s+Member\s+(?P<member_name>\w+).*\s+\((?P<member_type>\w+)\) of file\s+(?P<filename>.+)\s+is not documented'