[英]regex for triple quote
什么正则表达式会在Python源代码中找到三重引用注释(可能是多行)?
Python不是常规语言,无法使用正则表达式进行可靠的解析。
如果你想要一个合适的Python解析器,请查看ast模块。 您可能正在寻找get_docstring
。
re.findall('(?:\n[\t ]*)\"{3}(.*?)\"{3}', s, re.M | re.S)
仅捕获在行的乞讨中的三引号内的文本,并且可以在空格,制表符或任何内容之前,因为python docstrings应该是。
我发现这对我来说非常合适(与TextMate一起使用):
"{3}([\s\S]*?"{3})
我想删除库中的所有注释,这会处理三重引用注释(单行或多行,无论它们在哪里开始)。
对于哈希注释(更容易),这适用:
#.*$
我在TextMate中使用了这些,它使用K. Kosako的Oniguruma正则表达式库(http://manual.macromates.com/en/regular_expressions)
我从Tim Peters那里找到了这个(我想):
pat = """
qqq
[^\\q]*
(
( \\\\[\000-\377]
| q
( \\\\[\000-\377]
| [^\\q]
| q
( \\\\[\000-\377]
| [^\\q]
)
)
)
[^\\q]*
)*
qqq
"""
pat = ''.join(pat.split(), '')
tripleQuotePat = pat.replace("q", "'") + "|" + pat.replace('q', '"')
但是,正如bobince所说,单独使用正则表达式似乎不是解析Python代码的正确工具。
所以我从标准库中使用了tokenize 。
我不知道在扫描Python代码时这会有多好,但这似乎与Python字符串隔离。
^(\"([^\"\n\\]|\\[abfnrtv?\"'\\0-7]|\\x[0-9a-fA-F])*\"|'([^'\n\\]|\\[abfnrtv?\"'\\0-7]|\\x[0-9a-fA-F])*'|\"\"\"((?!\"\"\")[^\\]|\\[abfnrtv?\"'\\0-7]|\\x[0-9a-fA-F])*\"\"\")$
转义不是标准的Python; 这是我从项目中剪下来的东西。 请在regex101.com上查看 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.