正则表达式仅当函数包含特定变量时才匹配函数

2024-09-29 03:26:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个从文件中读取的字符串

    /**********************************************************************functionheaderstuff***********************************************************************************************************************/
void fn1(void)
{   
    b= 8;
}

/***********************************************************************functionheaderstuff***********************************************************************************************************************/

void fn2(int a, intb)
{   int c;

    var = 6;
}

我想匹配包含所写变量var的函数

有了这个regex(?<=[*]{60}\/)(\s*\w+(?: \w+\s*)(?=(\((.*?)\)\s*{))).*(\bvar\b([^>=<!;{])*[=]{1}[^=]*?[;]),我将匹配这两个函数,因为。*是贪婪的。我需要它在遇到}\s*\/[*]{60}时不匹配,并且只在函数包含正在编写的变量时匹配,最好只在变量不在注释内时匹配

负前瞻不起作用-((?<=[*]{60}\/)\s*\w+(?: \w+\s*)(?=(\((.*?)\)\s*{)).*)(?!(\s*}\s*\/[*]{60}))(\bvar\b([^>=<!;{])*[=]{1}[^=]*?[;])

我的函数将以我共享的函数头类型开始。查找要写入的变量并识别函数可以正常工作。 如果函数包含从下一个函数获取的变量,则此正则表达式可以正常工作。我做错了什么


Tags: 函数字符串类型varregexint前瞻void
1条回答
网友
1楼 · 发布于 2024-09-29 03:26:52

我改变了方法,得到了我需要的东西。最初我删除了所有的评论。我匹配了字符串中的函数并将其添加到列表中。然后检查变量。 Python code

import regex
text = """void fn1(void){       b= 8;} void fn2(int a, intb){   int c;    var = 6;}"""

#checks for complete function definition
string1 = r'\w+(?:\s+\w+)*\w+[(][\w,\.*\s&\[\]]*[)]\s*({(?:[^{}]++|(?1))*})'

varwrite = r'\bvar\b([^>=<!;{])*[=]{1}[^=]*?[;]'
reg = regex.compile(varwrite,regex.MULTILINE )
y =[x.group() for x in regex.finditer(string1,text,regex.DOTALL)]
print(y)
for line in range(len(y)):
    if reg.search(y[line]):
        z =y[line].split('(',1)[0]
        print(z.split()[-1])

相关问题 更多 >