正则表达式有时并不像预期的那样工作

时间:2018-02-19 17:25:32

标签: python regex

我正在解析TrackMania的.Gbx重播文件。它与我感兴趣的字节码和XML标题部分混合在一起。我试图从重播文件中提取该部分。对于大多数重播,它工作得很好。但是我遇到了破坏正则表达式的特定重播。

import re

string = r'''
<header type="replay" exever="3.3.0" exebuild="2018-02-09_15_48" 
title="TMStadium"><map uid="Y48WnfHlw9SkYptpMIVkd0PUpRm" 
name="$fffTM$09FProLeague$fff xtasis -$09F GWF$fff2018
" author="w_1r" authorzone="World|Europe|Netherlands|Gelderland"/><desc 
envir="Stadium" mood="Day" maptype="TrackMania\Race"
mapstyle="" displaycost="2149" mod="" /><playermodel id="StadiumCar"/><times 
best="92373" respawns="1" stuntscore="7"
validable="1"/><checkpoints cur="13" onelap="13"/></header>
'''
header = r'(<header)(.*)(</header>)'
print(re.findall(header, string))

文件的其他部分似乎并不重要,因为即使使用手动复制的标题部分,正则表达式也不起作用。

任何人都可以帮忙找到我失踪的东西吗?

1 个答案:

答案 0 :(得分:0)

感谢您chrisz建议将(?s) mode modifier添加到我的正则表达式中。 启用&#34;单线模式&#34;这使得点匹配所有字符,包括换行符。

正确的正则表达式:

(<header)((?s).*)(</header>)