2009-09-24 56 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