正则报价为三重报价

时间:2009-09-24 14:26:02

标签: python regex

什么正则表达式会在Python源代码中找到三重引用注释(可能是多行)?

5 个答案:

答案 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上查看它的运行情况。