Различное поведение результатов регулярных выражений в Windows и Linux

Я запускаю следующее регулярное выражение для извлечения значений до и после @ символ в строке.

re.search(r'\S+ @ \S+(?=\n)', output).group().split(' @ ')

Пример строки выглядит так:

1
1.1
2.2
2.2.2
20 @ 0xffffffff
SUCCESS

Я протестировал это в консоли Python в обеих средах, и она работает так, как я намереваюсь.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я запускаю свои тесты на нос в Windows, я получаю AttributeError: 'NoneType' object has no attribute 'group' ошибка в этой строке. Однако этого не происходит при запуске тестов на нос в Linux.

1 ответ

Решение

У вас есть проблема, потому что у вас есть \n как новая строка. В Windows нужно указать \r\n, Таким образом, для поддержки сред Windows и Linux используйте

r'\S+ @ \S+(?=\r?\n)'

Кроме того, вы должны проверить, есть ли совпадение, прежде чем получить доступ к .group(),

Другие вопросы по тегам