2013-10-29 186 views
1

我試圖將perl正則表達式轉換爲等效的python。將perl正則表達式轉換爲python正則表達式

線在Perl:

($Cur) = $Line =~ m/\s*\<stat\>(.+)\<\/stat\>\s*$/i; 

我已經嘗試,但似乎並沒有工作:

m = re.search('<stat>(.*?)</stat>/i', line) 
cur = m.group(0) 
+3

二話不說,就需要各地交換參數:'re.search( '(*) /我?',行)'。 – rlms

+5

'+'在Perl和Python中的含義相同,我不確定爲什麼要將'(。+)'改成'(。*?)'。 –

+0

這兩個正則表達式不等價。 – Toto

回答

5

幾乎/i指不區分大小寫

m = re.search(r'<stat>(.*?)</stat>',line,re.IGNORECASE) 

還使用字符串上的r修飾符,所以你不需要像尖括號那樣轉義東西。

但我的猜測是一個更好的解決方案是使用HTML/XML解析器像beautifulsoup或其他類似的包

3

像下面這樣...

r是Python正則表達式模式和原始字符串符號爲了避免轉義,在前綴字符串數據後面加上正則表達式。 re.I用於不區分大小寫的匹配。

查看re文檔更詳細地解釋了這一點。

要找到你的對手,你可以使用的group()方法MatchObject這樣的:

cur = re.search(r'<stat>([^<]*)</stat>', line).group(1) 

使用search()只匹配第一次出現,使用findall()匹配所有事件。

matches = re.findall(r'<stat>([^<]*)</stat>', line) 
相關問題