gpt4 book ai didi

python - 通过正则表达式在 C++ 中搜索基本注释

转载 作者:太空宇宙 更新时间:2023-11-03 18:05:45 25 4
gpt4 key购买 nike

我正在编写一个Python程序,用于使用正则表达式在C++程序中搜索注释。我编写了以下代码:

import re
regex = re.compile(r'(\/\/(.*?))\n|(\/\*(.|\n)*\*\/)')
comments = []
text = ""
while True:
try:
x= raw_input()
text = text + "\n"+ x
except EOFError:
break
z = regex.finditer(text)
for match in z:
print match.group(1)

此代码应该检测类型为 //I'm comment/*blah blah blah 的注释
等等等等*/
我得到以下输出:

// my  program in C++
None
//use cout

这是我没想到的。我的想法是 match.group(1) 应该捕获 (\/\*(.|\n)*\*\/) 的第一个括号,但事实并非如此。我正在测试的 C++ 程序是:

// my  program in C++

#include <iostream>
/** I love c++
This is awesome **/
using namespace std;

int main ()
{
cout << "Hello World"; //use cout
return 0;
}

最佳答案

您没有使用正确的顺序来执行此操作,因为内联注释可以包含在多行注释中。因此,您需要从多行注释开始您的模式。示例:

/\*[\s\S]*?\*/|//.*

请注意,如果您有很长的多行注释,您可以改进此模式(此语法是 re 模块不支持的原子组功能的模拟):

/\*(?:(?=([^*]+|\*(?!/))\1)*\*/|//.*

但也要注意,还有其他陷阱,例如包含 /*...*///..... 的字符串。

因此,如果您想避免这些情况,例如,如果您想进行替换,则需要捕获之前的字符串并在替换字符串中使用反向引用,如下所示:

(pattern for strings)|/\*[\s\S]*?\*/|//.*

替换:$1

关于python - 通过正则表达式在 C++ 中搜索基本注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26939370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com