正则表达式仅在函数上方获取一个 c 风格的多行注释

regex to grab only one c-style multi-line comment immediately above a function

我正在尝试使用正则表达式获取某些 c 代码 中位于任意函数之上的多行注释。只有紧挨着函数的注释和函数代码本身才是我感兴趣的。注释肯定会有一个“\abc” 最后(见片段)。我也不太关心函数下面是否有更多代码或文本。在函数后面包含一些text/noise的解决方案也是可以的。

我想通过 惰性评估 获取函数上方的注释,但它还没有完全起作用。

这是我的最小示例

import re

snippet = """
/*=================================================*
* THIS IS NOT THE COMMENT I WANT
*===============================================*/

/* THIS IS THE COMMENT I WANT.
* It should be able to have special characters like /,*.
* \abc
*/
TEST(foo,bar){
    ...
}
"""

pattern = re.compile(r"(\/\*.)?\abc.*", re.DOTALL)
search = pattern.search(snippet)
match = search.group(0)
print(match)

输出

\abc
*/
TEST(foo,bar){
    ...
}

期望的输出

/* THIS IS THE COMMENT I WANT.
* It should be able to have special characters like /,*.
* \abc
*/
TEST(foo,bar){
    ...
}

/\*((?!\*/).)+\abc.*

这不是最易读的,但它有效。它显示:/* 然后 \abc 然后所有内容,但是在匹配 \abc 之前你不能匹配 */。或者更准确地说,/* 然后是一些不属于 */ 的字符,然后是 \abc,然后是所有字符。

https://regex101.com/r/x1bXVg/3