Как заставить Python игнорировать re.DOTALL в операторе re.findall ()? - PullRequest
1 голос
/ 05 января 2010

Я бился головой о клавиатуру в поисках просветления через Google и все документы 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.

1 Ответ

2 голосов
/ 05 января 2010

.+> должен измениться на [^>]+> и

.*?> до [^>]*>

Вы также можете попробовать заменить другие точки на [^\r\n], но более 2 изменений должно быть достаточно.

...