使用python re去除多行$ Log关键字扩展

时间:2017-05-02 22:52:41

标签: python regex python-2.7 multiline non-greedy

我需要删除大量带有$ 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 ..

Python non-greedy rebexes

我能得到的最接近的是:

content = re.sub(re.compile(r'\$Log:.*', re.DOTALL), '', content)

当然会留下开场/*

以下删除了我的整个示例测试文件,因为文件打开时带有匹配的注释(我认为非贪婪的?修饰符会阻止此操作):

content = re.sub(re.compile(r'^/\*.*?\$Log:.*', re.DOTALL), '', content)

我尝试使用re.MULTILINE但没有成功。

如何在Python中定义正则表达式来获取整个$ Log注释 - 并且文件中没有先前的注释?

3 个答案:

答案 0 :(得分:1)

您可以使用:

result = re.sub(r"/\*\s+\*+\s+\$Log.*?\*/", "", subject, 0, re.DOTALL)

enter image description here

Regex Demo

Python Demo

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

Regex101:python的示例代码可用here

Python Demo

enter image description here

答案 2 :(得分:0)

content = re.sub(re.compile(r'\/\*\n\**\n\$Log(?:.|[\n])*\*\/', re.DOTALL), '', content)

Regex Explanation