2012-02-29 48 views

回答

4

您必須使用re.DOTALL標誌,這將允許.也與新行匹配(因爲您的doc是多行)。

如果你只想要外部的def/end塊(即忽略縮進的塊),你可以額外在正則表達式中使用'^ def'和'^ end',在這種情況下,你還需要使用re.MULTILINE標誌,這允許'^'和'$'匹配的開始/結束(而不是字符串的開始/結束)。

re.findall('^def(.*?)^end',doc,re.DOTALL|re.MULTILINE) 
+0

我怎麼能從這裏得到:doc =「{'content':'LAND.L','href'」表示'LAND.L'?我試過:''content':(。*?),\ b'href'「,但它不起作用。謝謝! – 2012-11-16 22:44:35

+0

糾正爲:re.findall(「[^ \'] content [^ \']:(。*?)[^ \'] href [^ \']」,a),但它仍然不起作用。它返回一個。 – 2012-11-16 23:06:54

+0

我如何從整個單詞中獲得?例如在「我的標題」和「我的結局」之間獲得段落。謝謝 – 2015-07-09 06:47:53

0

您需要使re.MULTILINE標誌匹配單個正則表達式中的多行。 此外,^$匹配換行符(\n

>>> re.findall(r"^def$\n(.*)\n^end$", doc, re.MULTILINE) 
[' test', ' hello', ' world'] 

如果你不想匹配塊開頭的空白,增加\W+

>>> re.findall(r"^def$\n\W*(.*)\n^end$", text, re.MULTILINE) 
['test', 'hello', 'world'] 
+0

re.MULTILINE只會將'^'和'$'轉換爲每行而不是每個字符串運算符。這對多行輸入(而不是多行正則表達式)不起作用。 – 2012-02-29 06:13:16

2
r = re.findall('def(.*?)end', doc, re.S) 
相關問題