使用 python re 剥离多行 $Log 关键字扩展

Strip multiline $Log keyword expansion with python re

我有大量末尾带有 $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
*/

我想删除上面显示的所有文本,包括 评论锚 /**/ 以及介于两者之间的所有内容。

我看了这些 questions/answers 和其他一些:

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 评论 -- 以及文件中先前评论的 none?

您可以使用:

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


Regex Demo

Python Demo

有点不清楚您期望的输出是什么。我的理解是您正在尝试提取评论。我假设注释出现在第 3 行,您必须使用正则表达式提取第三行。使用的正则表达式:

($Log:.*[\r\n]*.*[\r\n])(.*)

使用正则表达式匹配后,第三组将是如下link和截图所示的评论。因此可以使用 .group(2) 获取 blah blah blah。在下面添加 python 代码:

matches = re.search(r"($Log:.*[\r\n]*.*[\r\n])(.*)", content)
print matches.group(2)
// Output: blah blah blah

Regex101: Sample code for python is available here.

Python Demo

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

Regex Explanation