Python:用多行注释之间的空格替换换行符

时间:2014-05-12 05:42:39

标签: python regex

我是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

即使我用空格替换换行符,也不会打印注释的第二行。 请帮助我。

2 个答案:

答案 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

请注意,注释甚至不是单个组件 - 它实际上是一个子组件,斜杠是一个单独的组件。