Python:用多行注释之间的空格替换换行符
我对python比较陌生,需要打印C程序中使用的多行注释。 我有一个test.c文件,如下所示: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)
/* 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