繁体   English   中英

正则报价为三重报价

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM