2016-02-17 86 views
0

我想從字符串中提取像***。ini這樣的子字符串。 例如,我有使用python正則表達式提取子字符串

000012: 378:210 File=test1.ini Cmd:send command1 
000512: 3378:990 File=test2.ini Cmd:send command2 File=not.ini Cmd: include command 

我需要後先提取子「文件=」,和第一個文件後的子= *** INI這是「CMD:......」。直到結束。

所以結果我想要的是:

test1.ini 
Cmd:send command1 

test2.ini 
Cmd:send command2 File=not.ini Cmd: include command 

我想:

re.match("(.*) File=(.*).ini(.*)Cmd:(.*)", line, re.M\re.I) 

這個作品很好地與第一線,但第二線,我得到:

test2.ini Cmd:send command2 File=not.ini #which is wrong, wanted is: 

test.ini 

Cmd: include command 

任何人都請幫忙。謝謝。 LJ

+0

問題的根源是'(。*)'這將貪婪地捕獲所有東西,直到表達式其餘部分的最後一個匹配。 –

回答

1

您可以使用此正則表達式與re.findall功能:

\bFile=(.+?\.ini)\s+(Cmd:.*) 

RegEx Demo

代碼:

p = re.compile(ur'\bFile=(.+?\.ini)\s+(Cmd:.*)') 
print re.findall(p, input_str) 
1

*太貪婪,也沒有必要從行首開始匹配。試試這個

re.search("File=([^\.]+.ini).*?(Cmd:.*)", line).groups()