У меня странное поведение для win10 и ubuntu 18.04 с python 3.7.4 и следующим кодом
def tokenize(text, match=re.compile(b"([idel])|(\d+):|(-?\d+)").match):
i = 0
while i < len(text):
m = match(text, i)
s = m.group(m.lastindex)
i = m.end()
if m.lastindex == 2:
yield "s"
yield text[i:i + int(s)]
i = i + int(s)
else:
yield s
Когда я открываю файл в режиме rb на win10 и ubuntu, я получаю разные результатыдля
m = match(text, i)
s = m.group(m.lastindex)
Для linux m.lastindex равен 1
, а на win10 - 2
.Дампы для re.compile равны, версии Python тоже.
В Windows объект re.Match имеет следующие значения
<re.Match object; span=(1, 3), match=b'8:'>
В Ubuntu:
<re.Match object; span=(0, 1), match=b'8:'>
Я проверил источники Python для функции соответствия, из которой выглядит чисто#defines и другие настройки.Сталкивались ли вы с подобной проблемой, как вы решили это?Заранее спасибо.:)
PS Протестировано с любым торрент-файлом, открытым в режиме rb.(например, http://releases.ubuntu.com/19.04/ubuntu-19.04-desktop-amd64.iso.torrent)
PPS У меня не было этой проблемы с python 2. Кажется, это может быть связано с newline types
, но файл открыт в режиме rb.
UPD: Сделан обходной путь с установкой i = -1
для режима Windows. Кажется, проблема была с первым байтом. Но не могли бы вы объяснить, почему это происходит?