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

问题描述

我正在尝试在某些C代码中抓住多行注释,该注释位于使用正则表达式的任意函数之上。我只对直接在函数上方的注释和函数代码本身感兴趣。注释的末尾肯定有一个“ \ abc” (请参见摘要)。我也不在乎函数下方是否还有其他代码或文本。也可以接受在功能后包含一些文本/噪声的解决方案。

我当时正在考虑通过惰性评估在功能上方获取注释,但目前尚无法正常工作。

这是我的最小例子

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...