1

我一直在敲击键盘,通过谷歌和所有我可以得到的 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。如果我在重试时启用它,它会复制我在脚本上独立运行它时得到的结果。如果我取消勾选 DOTALL,那么它会给我我期望的结果。

如何强制 Python 不使用 re.DOTALL?

该脚本可在 Ubuntu 和 OS X 上运行。

4

1 回答 1

2

.+>应该改为[^>]+>

.*?>[^>]*>

您也可以尝试将其他点替换为[^\r\n],但以上2个更改就足够了。

于 2010-01-05T01:03:22.203 回答