删除块注释但保留换行符
removing block comments but keeping linebreaks
我正在使用此正则表达式从 python 脚本中删除块注释
re.sub("'''.*?'''", "", string, flags = re.DOTALL)
它删除包括换行符 (\n) 在内的完整块注释。但是我想保留换行符以进一步处理文件。有什么办法可以用正则表达式做到这一点吗?
您正在做的是尝试查找多行字符串中包含的行的重复匹配项,并将它们替换为新行字符而不是整行。 Re.sub 实际上可以将 method/lambda 作为它的第二个参数,这就是你应该做的。这是来自 pythons documentation
的描述和示例
If repl is a function, it is called for every non-overlapping
occurrence of pattern. The function takes a single match object
argument, and returns the replacement string.
>>> def dashrepl(matchobj):
... if matchobj.group(0) == '-': return ' '
... else: return '-'
>>> re.sub('-{1,2}', dashrepl, 'pro----gram-files')
'pro--gram files'
>>> re.sub(r'\sAND\s', ' & ', 'Baked Beans And Spam', flags=re.IGNORECASE)
'Baked Beans & Spam'
使用这个概念,您只需找到块引号和其中的所有内容,然后将该匹配项传递给一个方法,该方法将 运行 它自己的搜索,但是这次您可以将任何行替换为一个换行符。所以这就像用 "\n" 替换 "^.*" 并确保你不删除三重引号,或者不将它们包含在原始正则表达式组中。然后,您可以将该值从方法传回,然后独立地为每个组发生。
我正在使用此正则表达式从 python 脚本中删除块注释
re.sub("'''.*?'''", "", string, flags = re.DOTALL)
它删除包括换行符 (\n) 在内的完整块注释。但是我想保留换行符以进一步处理文件。有什么办法可以用正则表达式做到这一点吗?
您正在做的是尝试查找多行字符串中包含的行的重复匹配项,并将它们替换为新行字符而不是整行。 Re.sub 实际上可以将 method/lambda 作为它的第二个参数,这就是你应该做的。这是来自 pythons documentation
的描述和示例If repl is a function, it is called for every non-overlapping occurrence of pattern. The function takes a single match object argument, and returns the replacement string.
>>> def dashrepl(matchobj):
... if matchobj.group(0) == '-': return ' '
... else: return '-'
>>> re.sub('-{1,2}', dashrepl, 'pro----gram-files')
'pro--gram files'
>>> re.sub(r'\sAND\s', ' & ', 'Baked Beans And Spam', flags=re.IGNORECASE)
'Baked Beans & Spam'
使用这个概念,您只需找到块引号和其中的所有内容,然后将该匹配项传递给一个方法,该方法将 运行 它自己的搜索,但是这次您可以将任何行替换为一个换行符。所以这就像用 "\n" 替换 "^.*" 并确保你不删除三重引号,或者不将它们包含在原始正则表达式组中。然后,您可以将该值从方法传回,然后独立地为每个组发生。