2009-09-24 59 views

回答

10

Python不是一种常规语言,不能可靠地使用正则表达式进行解析。

如果您想要一个合适的Python解析器,请查看ast模块。您可能正在寻找get_docstring

+2

+1:使用正则表达式的问题没有有效的解决方案,只有半工作的黑客 – nosklo 2009-09-24 16:30:52

+0

我相信正则表达式足够强大,可以做到这一点,但是为这样的任务构造适当的正则表达式是很难,所以使用内置的Python解析器是更可靠的解决方案。 – 2009-09-25 08:16:06

+0

你有链接吗?'不能可靠地使用正则表达式解析'W这些语言可以吗? – u0b34a0f6ae 2009-09-25 09:15:37

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

捕捉三重引号是在一行的乞讨,并可以通过空格,制表符或没有前面,如蟒蛇文档字符串应该是内只有文字。

+0

单引号怎么办? – Triptych 2009-09-24 14:42:13

+3

以及如何:'a ='“”“”不是一个真正的三重报价“”“”'' – Triptych 2009-09-24 14:45:04

+0

为什么它不是一个真正的三重报价?格式化中有些东西丢失了吗? – SilentGhost 2009-09-24 14:46:14

0

我发现这个从蒂姆·彼得斯(我认为):

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代码的工具。
所以我从标准化从标准库去。

+0

最后,我使用** pygments **(http :// Pygments来做。org /) – dugres 2010-01-19 17:33:07

2

我觉得这是完美的我(对TextMate用它)工作:

"{3}([\s\S]*?"{3}) 

我想从库中删除所有的评论和这个照顾了三重报价评论(单层或多层无论他们从哪里开始)。

哈希评论(很容易),这个工程:

#.*$ 

我用这对TextMate,它通过K. Kosako使用Oniguruma正则表达式库(http://manual.macromates.com/ en/regular_expressions)

+0

请注意,弱重复('*?')对于匹配一个triqle引用的字符串是可靠的,但如果您从中构建更大的模式会有风险。例如。 '\('“”[\ s \ S] *?“”“\)'并不意味着括号中有一个三重引号的字符串 - 它也会匹配'(”“”1st string“”“whatever ...”“ “第二个字符串”“”)'。 – 2015-12-19 21:42:14