如何强制Python在re.findall()中忽略re.DOTALL?
我一直在用键盘敲打自己,试图通过谷歌和所有能找到的Python文档来寻找答案,但我遇到的问题还是没有解决。
我有一个正则表达式用来处理一个网站,但Python总是自动把它设置为re.DOTALL,尽管我的代码并没有要求这样做:
\d+. +(?P<season>\d+) *\- *(?P<episode>\d+).*?(?P<day>\d+)(?:\/|\s)+(?P<month>[A-Za-z]+)(?:\/|\s)+(?P<year>\d+) +(?:<a .+><img .+></a>)? ?<a .*?>(?P<name>.*?)</a>
这个正则表达式会生成一个关于电视剧季数和集数的数组,基本上运行得很好,除了在epguides.com/BurnNotice(使用TVRage的列表时),因为在换行符前面有一些空格(我猜是这样)。
我使用http://re-try.appspot.com进行测试,发现问题出在re.DOTALL的使用上。如果我在re-try上启用它,结果就和我在自己的脚本中运行时得到的一样。如果我取消勾选DOTALL,那么结果就如我所期待的那样。
我该如何强制Python不使用re.DOTALL呢?
这个脚本在Ubuntu和OS X上都能运行。
1 个回答
2
.+>
应该改成 [^>]+>
,而
.*?>
则改成 [^>]*>
你也可以试着把其他的点(.)替换成 [^\r\n]
,不过上面这两个改动应该就够用了。