2012-02-12 77 views
3

我在使用正則表達式搜索多行模式時遇到了一些麻煩。下面是示例多行字符串:多行正則表達式

some command [first line]\n 
second line \n 
yes can have multiple lines\n 
\n 
something else that I do not care about. 

這裏是我到目前爲止已經試過:

>>> match = re.match(r"^(.+)\n((.*\n)*)\n",body,re.MULTILINE) 
>>> match.groups() 
('some command [first line]', 'second line \nyes can have multiple lines\n', 'yes can have multiple lines\n') 

我要找match.group(1)和match.group(2),和我很高興與他們在一起,但這讓我感到困擾,我得到了match.group(3),這是我不期望的(並且使我感到我的正則表達式不正確)。

而且,我似乎並沒有得到命名的模式的權利..

match = re.match(r"^(.+)\n((?P<bd>.*\n)*)\n",body,re.MULTILINE) 
>>> match.group(bd) 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
NameError: name 'bd' is not defined 

我通過Python Regular Expressions from Google去了,但很明顯,我還沒有得到完整的圖片呢。

回答

3

我理解你是否正確,你期望的結果是在組3中而不是在組2中?

如果這是你的問題,你可以通過把一個?:在開始這樣

re.match(r"^(.+)\n(?:(.*\n)*)\n",body,re.MULTILINE) 

有了這個,你將只能得到兩個組的結果使組非捕獲。

也許我把你錯了,你想擺脫組3,那麼

re.match(r"^(.+)\n((?:.*\n)*)\n",body,re.MULTILINE) 

將是解決辦法。

命名組

您可以訪問命名組這樣

m.group('bd') 

你需要給group()無論是整數或字符串作爲參數,見MatchObject