我是python的新手,我需要打印C程序中使用的多行注释。 我有一个test.c文件,如下所示:
/* print multiline
comments */
我尝试了以下python代码来解析C代码并打印多行注释
import re
fileopen = open('test.c', 'rw')
for var in fileopen:
if var.startswith("/*"):
var1 = re.sub(r'\n', " ", var)
var1 = var.rstrip()
print var1
我得到的输出是:
/* print multiline
即使我用空格替换换行符,也不会打印注释的第二行。 请帮助我。
答案 0 :(得分:2)
如果你唯一的要求是找到跨越多行的评论,那实际上很容易。像这样:
for match in re.finditer(r"\/\*(.*\n.*)\*\/", code, re.MULTILINE):
print match.group(1)
重要的部分是:
\/\*(.*\n.*)\*\/
找到文字/*
,任意数量的字符,换行符,任意数量的字符和文字*/
,并捕获评论分隔符之间的部分。
此外,标记re.MULTILINE
允许正则表达式搜索跨行搜索,这样我们就可以强制必须成为多行注释。
full code can be run on codepad.org:
code= """/* print multiline
comments */
// One line comment
/* Another one line comment */
/* Multiline
comment */
"""
import re
for match in re.finditer(r"\/\*(.*\n.*)\*\/", code, re.MULTILINE):
print match.group(1)
给出了:
print multiline
comments
Multiline
comment
答案 1 :(得分:-1)
修改强>
有人指出,预处理器阶段可能会处理意见,经过进一步反思,我同意。不需要完整的解析器。
原创(忽略):
真正要正确实现这一点,你需要至少在注释的时候为C语法实现一个解析器,因为有很多种语法可以作为标准正则表达式无法捕获的有效C注释。
例如,这里是Yacc文件中C语法的链接:http://www.quut.com/c/ANSI-C-grammar-y.html。
请注意,注释甚至不是单个组件 - 它实际上是一个子组件,斜杠是一个单独的组件。