什么正则表达式会在Python源代码中找到三重引用注释(可能是多行)?
答案 0 :(得分:10)
Python不是常规语言,无法使用正则表达式进行可靠的解析。
如果您想要一个合适的Python解析器,请查看ast模块。您可能正在寻找get_docstring
。
答案 1 :(得分:5)
re.findall('(?:\n[\t ]*)\"{3}(.*?)\"{3}', s, re.M | re.S)
只捕获三行引号中的文本,这些文本位于一行的前面,并且可以以空格,制表符或任何内容开头,因为python文档字符串应该是。
答案 2 :(得分:2)
我发现这对我来说非常合适(与TextMate一起使用):
"{3}([\s\S]*?"{3})
我想删除库中的所有注释,这会处理三重引用注释(单行或多行,无论它们从哪个行开始)。
对于哈希注释(更容易),这有效:
#.*$
我在TextMate中使用了这些,它使用了K. Kosako的Oniguruma正则表达式库(http://manual.macromates.com/en/regular_expressions)
答案 3 :(得分:0)
我从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 。
答案 4 :(得分:0)
我不知道这在扫描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上查看它的运行情况。