Python正则表达式匹配C语言函数

以下python代码主要用于匹配各种类型的C语言函数,使用的为re.search,意味着包含,如果需要完全匹配请用re.match。

# coding=utf-8
import re

# 匹配函数,包含函数体
function_return_type = r'''
                    (\s*) #匹配所有的空白字符
                    (   
                       (const)?(volatile)?(static)?\s*(inline)?\s*(extern)?\s*
                                (
                                    (VOID)|(void)|(enum)|
                                        ((unsigned)?(signed)?(long)?\s*(int)|(char)|(float)|(short)|(long)|(double))|
                                        (bool)|(struct\s*\w+)|(union\s*\w+)|(wait_queue_t)|(wait_queue_head_t)
                                )
                                \s*(fastcall)?
                        
                    )  #匹配函数返回类型
                    (\s*(\*)?\s*) #识别有无指针类型*,以及空白字符
                    (\w+) #识别函数名称 
                    ((\s*)(\()(\n)?) #识别函数开始小括号
                    ((\s*)?(const)?(volatile)?(\s*)? #参数前是否有const、volatile
                    (   
                       (static)?\s*(inline)?\s*(extern)?\s*
                                (
                                    (VOID)|(void)|(enum)|
                                        ((unsigned)?(signed)?(long)?\s*\s*(int)|(char)|(float)|(short)|(long)|(double))|
                                        (bool)|(struct\s*\w+)|(union\s*\w+)|(wait_queue_t)|(wait_queue_head_t)
                                )
                                \s*(fastcall)?
                        
                    ) #参数类型
                    (\s*)(\*)?(\s*)?(restrict)?(\s*)?(\w+)(\s*)?(\,)?(\n)?(.*)?)* 
                    ((\s*)(\))(\n)?) #函数结束小括号
                    ((\s*)(\{)(.|\n)*(\s*)(\})(\s*))#函数体
'''

if __name__ == "__main__":
    code = """
    
! static inline void wake_up_page(struct page *page,
! int bit)
{
	__wake_up_bit(page_waitqueue(page), &page->flags, bit);
}

    """
    # print(type(code)) #输出类型
    # code1 = code.replace('!', '&') #替换掉!
    # code = re.sub('!', '?', code) #替换掉!
    # print(code1) #输出替换后的字符串
    pat1 = re.compile(function_return_type, re.X)
    ret = pat1.search(code) #包含
    # ret = pat1.match(code) #完全匹配
    if None == ret:
        print('不包含C函数定义!')
    else:
        print("包含C函数定义!")

参考链接:https://blog.csdn.net/yekong201210/article/details/99412853

你可能感兴趣的:(python入门)