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

Python:用多行注释之间的空格替换换行符,python,regex,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)

我对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
即使我用空格替换换行符,注释的第二行也不会打印出来。 请在这方面帮助我。

编辑:

有人指出,预处理阶段可能会处理评论,经进一步思考,我同意。不需要完整的解析器

原件(忽略):

要真正正确地实现这一点,您至少需要为注释实现一个C语法解析器,因为有各种各样的语法可以作为有效的C注释,而标准正则表达式不能捕获这些语法

例如,这里有一个指向Yacc文件中C语法的链接:


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

如果您的唯一需求是查找跨多行的注释,那么这实际上相当容易。像这样:

for match in re.finditer(r"\/\*(.*\n.*)\*\/", code, re.MULTILINE):
    print match.group(1)
重要的部分是:

\/\*(.*\n.*)\*\/
它查找文本
/*
、任意数量的字符、换行符、任意数量的字符和文本
*/
,并捕获注释分隔符之间的部分

此外,该标志允许正则表达式搜索跨行搜索,这允许我们强制它必须是多行注释

委员会:

其中:

print multiline
  comments 
Multiline
  comment 

在这种情况下使用正则表达式是个坏主意,问题是你一次只能读一行。正如其他人所说,在解析代码时必须小心……我认为这项任务不需要完整的语法。只是一个标记,我被纠正了。预处理器处理注释是正确的:。不过,正则表达式并不是这里使用的工具。为什么不呢?如我的回答所示,对于正则表达式来说,使用跨行搜索是一个微不足道的例子。为什么正则表达式不起作用?还是一个简单的手写解析器?复杂的情况是什么?没有[\n]*正则表达式不会返回只有一行的注释。正则表达式应该是“\/*(.[\n]*.*)\/@gurudevala好吧,OP要求“多行”注释,所以这会返回多行注释。公平地说,由OP决定他想要什么。
print multiline
  comments 
Multiline
  comment