我想解析.txt文件中的所有函數。它看起來像這樣:使用正則表達式在Python中的兩個字符串之間傳遞
def
test
end
def
hello
end
def
world
end
所以,我會得到下面的返回:[test, hello, world]
以下是我已經盡力了,但我沒有得到任何回報:
r = re.findall('def(.*?)end', doc)
print r
我想解析.txt文件中的所有函數。它看起來像這樣:使用正則表達式在Python中的兩個字符串之間傳遞
def
test
end
def
hello
end
def
world
end
所以,我會得到下面的返回:[test, hello, world]
以下是我已經盡力了,但我沒有得到任何回報:
r = re.findall('def(.*?)end', doc)
print r
您必須使用re.DOTALL
標誌,這將允許.
也與新行匹配(因爲您的doc
是多行)。
如果你只想要外部的def/end塊(即忽略縮進的塊),你可以額外在正則表達式中使用'^ def'和'^ end',在這種情況下,你還需要使用re.MULTILINE
標誌,這允許'^'和'$'匹配行的開始/結束(而不是字符串的開始/結束)。
re.findall('^def(.*?)^end',doc,re.DOTALL|re.MULTILINE)
您需要使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']
re.MULTILINE只會將'^'和'$'轉換爲每行而不是每個字符串運算符。這對多行輸入(而不是多行正則表達式)不起作用。 – 2012-02-29 06:13:16
r = re.findall('def(.*?)end', doc, re.S)
我怎麼能從這裏得到:doc =「{'content':'LAND.L','href'」表示'LAND.L'?我試過:''content':(。*?),\ b'href'「,但它不起作用。謝謝! – 2012-11-16 22:44:35
糾正爲:re.findall(「[^ \'] content [^ \']:(。*?)[^ \'] href [^ \']」,a),但它仍然不起作用。它返回一個。 – 2012-11-16 23:06:54
我如何從整個單詞中獲得?例如在「我的標題」和「我的結局」之間獲得段落。謝謝 – 2015-07-09 06:47:53