我试图将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