使用正则表达式删除多行python docstrings

时间:2017-06-13 21:42:06

标签: python regex

我想使用简单的搜索和替换从文件中删除所有python文档字符串,以下(非常)简单的正则表达式为一行doc字符串完成工作:

Regex101.com

""".*"""

如何扩展它以使用多线程?

试图在许多地方加入\s无济于事。

2 个答案:

答案 0 :(得分:3)

由于您无法使用内联s(DOTALL)修饰符,因此匹配任何字符的常用解决方法是使用具有相反速记字符类的字符类:

"""[\s\S]*?"""

"""[\d\D]*?"""

"""[\w\W]*?"""

将匹配"""然后匹配任何0+字符,尽可能少*?是一个懒惰的量词,然后跟踪"""

答案 1 :(得分:0)

有时会有不是文档字符串的多行字符串。例如,您可能有一个跨多行扩展的复杂 SQL 查询。以下尝试查找出现在类定义之前和函数定义之后的多行字符串。

import re

input = """'''
This is a class level docstring
'''
class Article:
    def print_it(self):
        '''
        method level docstring
        '''
        print('Article')
        sql = '''
SELECT * FROM mytable
WHERE DATE(purchased) >= '2020-01-01'
'''
"""
    
doc_reg_1 = r'("""|\'\'\')([\s\S]*?)(\1\s*)(?=class)'
doc_reg_2 = r'(\s+def\s+.*:\s*)\n(\s*"""|\s*\'\'\')([\s\S]*?)(\2[^\n\S]*)'
input = re.sub(doc_reg_1, '', input)
input = re.sub(doc_reg_2, r'\1', input)
print(input)

打印:

class Article:
    def print_it(self):
        print('Article')
        sql = '''
SELECT * FROM mytable
WHERE DATE(purchased) >= '2020-01-01'
'''