我試圖將perl正則表達式轉換爲等效的python。將perl正則表達式轉換爲python正則表達式
線在Perl:
($Cur) = $Line =~ m/\s*\<stat\>(.+)\<\/stat\>\s*$/i;
我已經嘗試,但似乎並沒有工作:
m = re.search('<stat>(.*?)</stat>/i', line)
cur = m.group(0)
我試圖將perl正則表達式轉換爲等效的python。將perl正則表達式轉換爲python正則表達式
線在Perl:
($Cur) = $Line =~ m/\s*\<stat\>(.+)\<\/stat\>\s*$/i;
我已經嘗試,但似乎並沒有工作:
m = re.search('<stat>(.*?)</stat>/i', line)
cur = m.group(0)
幾乎/i
指不區分大小寫
m = re.search(r'<stat>(.*?)</stat>',line,re.IGNORECASE)
還使用字符串上的r
修飾符,所以你不需要像尖括號那樣轉義東西。
但我的猜測是一個更好的解決方案是使用HTML/XML解析器像beautifulsoup或其他類似的包
像下面這樣...
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)
二話不說,就需要各地交換參數:'re.search( '(*) /我?',行)'。 –
rlms
'+'在Perl和Python中的含義相同,我不確定爲什麼要將'(。+)'改成'(。*?)'。 –
這兩個正則表達式不等價。 – Toto