使用 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)
有点不清楚您期望的输出是什么。我的理解是您正在尝试提取评论。我假设注释出现在第 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.
content = re.sub(re.compile(r'\/\*\n\**\n$Log(?:.|[\n])*\*\/', re.DOTALL), '', content)
Regex Explanation
我有大量末尾带有 $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)
有点不清楚您期望的输出是什么。我的理解是您正在尝试提取评论。我假设注释出现在第 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.
content = re.sub(re.compile(r'\/\*\n\**\n$Log(?:.|[\n])*\*\/', re.DOTALL), '', content)
Regex Explanation