问题描述
输入: /* ABCD X 1111 */ /* Comment 1111: [[reason for comment]] */
输出: /* ABCD X 1111 # [[reason for comment]] */
使用的正则表达式:regex = (?:[\/*]+\sPRQA[\s\w\,]*)(\*\/\s*\/\*\Comment[\w\,]+:)+(?:\s\[\[.*\/$)
如何使用上述正则表达式在出现多次的文件中将匹配的组替换为“#”?
我尝试使用re.sub(regex,'#\1',file.read(),re.MULTILINE)
,但这会将#附加到匹配的组中。
是否有一种直接的方法,而不是逐行迭代然后替换?
解决方法
您可以使用
re.sub(r'(/\*\s*ABCD[^*/]*)\*/\s*/\*\s*Comment[^*:]+:(\s*\[\[[^][]*]]\s*\*/)',r'\1#\2',file.read())
如果您确定这些子字符串仅出现在行尾,请向后添加$
锚点并使用flags=re.M
:
re.sub(r'(/\*\s*ABCD[^*/]*)\*/\s*/\*\s*Comment[^*:]+:(\s*\[\[[^][]*]]\s*\*/)$',file.read(),flags=re.M)
请参见regex demo。 详细信息:
-
(/\*\s*ABCD[^*/]*)
-组1(\1
):/*
,零个或多个空格,ABCD
,然后是除*
以外的任何零个或多个字符和/
-
\*/\s*/\*\s*Comment[^*:]+:
-*/
,零个或多个空格,/
,零个或多个空格,Comment
,除*
和{之外的一个或多个字符{1}},然后:
-
:
-第2组((\s*\[\[[^][]*]]\s*\*/)
):零个或多个空格\2
,除[[
和[
之外的零个或多个字符,{{ 1}},零个或多个空格,]
。
请参见Python demo:
]]
输出:
*/