我需要删除大量带有$ Log扩展关键字文本的文件。我希望修改现有的python 2.7脚本来执行此操作,但无法使正则表达式正常工作。
从文件末尾剥离的文本如下所示:
/*
one or more lines of ..
.. possible text
$Log: oldfile.c,v $
Revision 11.4 2000/01/20 19:01:41 userid
a bunch more text ..
.. of unknown number of lines
*/
我想删除上面显示的所有文字,包括评论主播/*
和*/
以及介于两者之间的所有内容。
我查看了这些问题/答案以及其他一些问题:
Python re.sub non-greedy mode ..
我能得到的最接近的是:
content = re.sub(re.compile(r'\$Log:.*', re.DOTALL), '', content)
当然会留下开场/*
。
以下删除了我的整个示例测试文件,因为文件打开时带有匹配的注释(我认为非贪婪的?
修饰符会阻止此操作):
content = re.sub(re.compile(r'^/\*.*?\$Log:.*', re.DOTALL), '', content)
我尝试使用re.MULTILINE但没有成功。
如何在Python中定义正则表达式来获取整个$ Log注释 - 并且文件中没有先前的注释?
答案 0 :(得分:1)
您可以使用:
result = re.sub(r"/\*\s+\*+\s+\$Log.*?\*/", "", subject, 0, re.DOTALL)
答案 1 :(得分:0)
有点不清楚你期望输出的是什么。我的理解是你试图提取评论。我假设评论出现在第3行,你必须使用正则表达式提取第三行。使用正则表达式:
(\$Log:.*[\r\n]*.*[\r\n])(.*)
使用正则表达式进行匹配后,第三组将成为评论,如下面的链接和屏幕截图所示。因此可以使用blah blah blah
获取.group(2)
。在下面添加python代码:
matches = re.search(r"(\$Log:.*[\r\n]*.*[\r\n])(.*)", content)
print matches.group(2)
// Output: blah blah blah
答案 2 :(得分:0)
content = re.sub(re.compile(r'\/\*\n\**\n\$Log(?:.|[\n])*\*\/', re.DOTALL), '', content)