gpt4 book ai didi

python - 使用正则表达式删除文档字符串的有效方法

转载 作者:行者123 更新时间:2023-12-01 00:16:53 25 4
gpt4 key购买 nike

我正在尝试创建一个脚本来删除文件夹内的所有文档字符串。为此,我希望使正则表达式尽可能高效。

我从这个开始:

import re

doc_reg = r'(class|def)(.+)\s+("""[\w\s\(\)\-\,\;\:]+""")'

file_content = '''
"""
Mycopyright (c)
"""

from abc import d

class MyClass(MotherClass):
"""
Some;
Multi-
Line Docstring:
"""

def __init__(self, my_param):
"""Docstring"""
self.my_param = my_param

def test_fctn():
"""
Some Docstring
"""

return True

def test_fctn():
some_string = """
Some Docstring
"""

return some_string
'''

print(re.sub(doc_reg, r'\1\2', file_content))

它工作得很好,但我很确定可以使这个正则表达式更加高效。

谢谢

最佳答案

您可以采取一些措施来提高效率,也可以采取一些措施来使其更短/更干净。

原始(607 steps)

(class|def)(.+)\s+("""[\w\s\(\)\-\,\;\:]+""")

清洁

您不需要在集合中的每个字符前添加反斜杠。这也可能对性能产生几乎微不足道的改进,因为 sre_parse.py 不会在第 554 行调用 _class_escape(我使用 Python 3.8.0 作为引用)。

(class|def)(.+)\s+("""[\w\s(),;:-]+""")
<小时/>

效率

量词

对重复字符使用量词 ( 595 steps )。

(class|def)(.+)\s+("{3}[\w\s(),;:-]+"{3})
^^^ ^^^

不需要的捕获组

删除不需要的捕获组 ( 588 steps )

(class|def)(.+)\s+"{3}[\w\s(),;:-]+"{3}
^^ ^^

anchor

尽可能锚定 ( 345 steps )

\b(class|def)(.+)\s+"{3}[\w\s(),;:-]+"{3}
^^

减少组

如果可能的话合并组 ( 337 steps ) - 替换现在变成 \1

\b(class.+|def.+)\s+"{3}[\w\s(),;:-]+"{3}
^^^^^^^^^^^^^^^

更改交替顺序

如果您怀疑 def 多于 class,则将 class|def 更改为 def|class 也会影响性能实例 ( 336 steps )

\b(def.+|class.+)\s+"{3}[\w\s(),;:-]+"{3}
^^^^^^^^^^^^^^^

关于python - 使用正则表达式删除文档字符串的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59270042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com