我正在寻找从字符串中删除C和C++注释的Python代码.(假设字符串包含整个C源文件.)
我意识到我可以用正则表达式匹配()子字符串,但这不能解决嵌套/*
问题,也不能解决/* */
中有//
的问题.
理想情况下,我更喜欢一个非幼稚的实现,能够正确处理尴尬的情况.
我正在寻找从字符串中删除C和C++注释的Python代码.(假设字符串包含整个C源文件.)
我意识到我可以用正则表达式匹配()子字符串,但这不能解决嵌套/*
问题,也不能解决/* */
中有//
的问题.
理想情况下,我更喜欢一个非幼稚的实现,能够正确处理尴尬的情况.
我不知道您是否熟悉sed
,这是一个基于UNIX(但Windows可用)的文本解析程序,但我发现了一个sed脚本here,它可以从文件中删除C/C++注释.它非常聪明;例如,如果在字符串声明中找到"//"和"/*",它将忽略.在Python中,可以使用以下代码使用它:
import subprocess
from cStringIO import StringIO
input = StringIO(source_code) # source_code is a string with the source code.
output = StringIO()
process = subprocess.Popen(['sed', '/path/to/remccoms3.sed'],
input=input, output=output)
return_code = process.wait()
stripped_code = output.getvalue()
在本程序中,source_code
是保存C/C++源代码的变量,最终stripped_code
将保存删除注释的C/C++代码.当然,如果您在磁盘上有文件,您可以让input
和output
变量作为指向这些文件的文件句柄(input
处于读模式,output
处于写模式).remccoms3.sed
是上述链接中的文件,应该将其保存在磁盘上的可读位置.sed
也可以在Windows上使用,并且默认安装在大多数GNU/Linux发行版和MacOSX上.
这可能比纯Python解决方案更好;不需要重新发明轮子.