【发布时间】:2021-01-07 12:00:20
【问题描述】:
我有这个从文件中读取的字符串。
/**********************************************************************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}[^=]*?[;])
我的函数将从我共享的函数头类型开始。查找写入的变量并识别函数可以正常工作。 如果函数包含从下一个函数获取的 var ,则此正则表达式可以正常工作。我在这里做错了什么?
【问题讨论】:
-
您可以通过更简单的方式实现您的目标。这不必在一个正则表达式中。
-
我花了很多时间试图解决这个问题。最好能做到这一点。如果有更简单的方法,您介意指出吗?
-
用正则表达式解析 C 代码就像用正则表达式解析 HTML 一样疯狂。请改用适当的解析器。
-
疯了,因为总会有更多的极端案例?我几乎得到了我需要的东西,即跨文件和函数提取全局变量信息
标签: python regex regex-lookarounds