2013-10-29 185 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) 
相关问题