Python 三重报价的正则表达式

Python 三重报价的正则表达式,python,regex,Python,Regex,什么正则表达式可以在Python源代码中找到三重引号注释(可能是多行) re.findall('(?:\n[\t ]*)\"{3}(.*?)\"{3}', s, re.M | re.S) 仅捕获三个引号内的文本,这些文本在行间,前面可以有空格、制表符或其他内容,就像python DocString应该的那样。python不是一种常规语言,无法使用正则表达式可靠地解析 如果您想要一个合适的Python解析器,请查看该模块。您可能正在寻找get\u docstring我从Tim Peters那里找

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

re.findall('(?:\n[\t ]*)\"{3}(.*?)\"{3}', s, re.M | re.S)

仅捕获三个引号内的文本,这些文本在行间,前面可以有空格、制表符或其他内容,就像python DocString应该的那样。

python不是一种常规语言,无法使用正则表达式可靠地解析


如果您想要一个合适的Python解析器,请查看该模块。您可能正在寻找
get\u docstring

我从Tim Peters那里找到了这个(我想):

但是,正如bobince所说,单独使用正则表达式似乎不是解析Python代码的正确工具。

因此,我使用了标准库中的标记化

我发现这对我来说非常有效(与TextMate一起使用):

我想从库中删除所有注释,这样就可以处理三重引用注释(单行或多行,不管它们从何处开始)

对于散列注释(更简单),可以这样做:

#.*$

我将这些用于TextMate,它使用K.Kosako的Oniguruma正则表达式库(http://manual.macromates.com/en/regular_expressions)

我不知道在扫描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;这是我从一个项目中剪切粘贴的东西。在。

上查看它的实际操作,下面是什么:
a='“不是真正的三重引号”
为什么它不是真正的三重引号?在格式方面有什么损失吗?我想非常类似的正则表达式也可以用来获得单引号(扩展给定的示例非常容易),我只是认为没有必要将单个正则表达式填充到无法理解的程度。因为它包含在一个简单的引号中。。。所以它是字符串文字的一部分。这是一个原始字符串吗,bobince?+1:这个问题没有使用正则表达式的有效解决方案,只有半个可行的方法。我相信正则表达式足够强大,可以正确地做到这一点。但是为这样的任务构造合适的regexp是很困难的,所以使用内置python解析器是更可靠的解决方案。你有相关链接吗?”无法使用正则表达式“”可靠地分析。哪些语言可以?勉强可读的理论摘要:。大多数编程语言都不是,但现代正则表达式有扩展,远远超出了传统的常规语言匹配。然而,Python的语法仍然太复杂,不适合正则表达式。另请注意,弱重复(
*?
)对于仅匹配triqle引用的字符串是可靠的,但如果从中构建更大的模式,则会有风险。例如,
\(“[\s\s]*?”\)
并不意味着括号中有一个三引号的字符串-它还将匹配
(“第一个字符串”“无论什么…”“第二个字符串”)
#.*$
^(\"([^\"\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])*\"\"\")$