如何从文件中删除评论块?

时间:2015-08-23 14:52:13

标签: python regex

因为有/*..*/<<>>!!符号的评论块,我需要将此文件的内容复制到另一个文件中,同时删除评论块和其他符号。

例如:

/*
author : xyz
date : 23/08/2015
this block is only for reference
*/
? fill j.dat 
!!
a1  hi   hello
b1  red orange
!!
? fill s.dat 
<<
>>
actual content of the file.  

我只想将actual content of the file复制到另一个文件。我可以使用任何正则表达式来避免这种情况吗?

3 个答案:

答案 0 :(得分:0)

我可能会使用这个正则表达式

<form id="frmSearch"">
    Search: <input type="text" name="qryWords" value="" />
   <input type="button" name="submit" value="Search" />
</form>

Regex101

答案 1 :(得分:0)

以下正则表达式替换可用于示例文本,但它可能无法很好地处理嵌套部分:

import re

text = """/*
author : xyz
date : 23/08/2015
this block is only for reference
*/
? fill j.dat 
!!
a1  hi   hello
b1  red orange
!!
? fill s.dat 
<<
>>
actual content of the file.  """

print re.sub("((\/\*.*?\*\/)|(<<.*?>>)|(!!.*?!!)|(^\? .*?$))" , "", text, flags=re.S+re.M).lstrip("\n")

这会显示:

actual content of the file.

这些将从文件中的任何位置删除,而不仅仅是在开头。

答案 2 :(得分:0)

当我使用re.sub时,我没有得到所需的结果,但在使用re.compile之后,我能够得到结果。我已经使用以下内容来获得所需的输出,但我不得不在多个步骤中获得它。以下是我的代码。

str1 = re.sub(re.compile("((/\*.*?\*/)|(<<.*?>>)|(!!.*?!!)|(\? (.*)?\?)|)", re.DOTALL), "", contents)
str1 = re.sub(re.compile('^[^\*]*\*', re.DOTALL), "", str1)
str1 = re.sub(re.compile('(?m)^\*', re.DOTALL), "", str1)
str1 = re.sub("(;\\\g)|(\\\g)", ';', str1)