我一直在用键盘敲击键盘,通过谷歌和所有可以得到的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列表时),因为在换行前有一些间距(I)猜测)。
使用http://re-try.appspot.com进行测试,我将问题缩小到使用re.DOTALL。如果我重新尝试启用它,它会复制我在脚本上独立运行时得到的结果。如果我取消DOTALL,那么它会给我我期望的结果。
如何强制Python不使用re.DOTALL?
该脚本在Ubuntu和OS X上运行。
答案 0 :(得分:2)
.+>
应更改为[^>]+>
和
.*?>
至[^>]*>
您也可以尝试将其他点替换为[^\r\n]
,但超过2的更改应该足够了。