问题描述
我正在尝试在某些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
,然后是所有字符。