【发布时间】:2020-07-25 08:34:02
【问题描述】:
我正在解析 Python 代码,我需要删除所有可能的 cmets/docstrings。我已经成功删除了表单的“cmets”:
#comment
"""comment"""
'''comment'''
但是,我发现了一些人们编写 cmets 形式的示例:
"'''comment'''"
"\"\"\"\n comment \"\"\""
我正在努力成功删除这些 cmets(三个单引号被双引号包围,双引号带有换行符)。我试过的表达是:
p = re.compile("([\'\"])\1\1(.*?)\1{3}", re.DOTALL)
code = p.sub('', code)
但这不适用于后两种情况。有人有什么建议吗?
【问题讨论】:
-
两者都不像真正的 cmets
-
我猜它们在技术上只是多行未分配的字符串,我只是称它们为 cmets,因为这是它们在这种情况下的功能(代码作者如何使用它们)
-
如果你正在解析 python,那么你应该像 python 对待它们一样对待它们——就像你提到的那样,作为多行未分配的字符串。
-
这可能会在函数或赋值中捕获三引号,这有时在带有换行符的字符串中很有用
-
从未使用过这个,但标准库中的tokenize 可能会有所帮助。
标签: python regex string parsing