gpt4 book ai didi

python - re.compile().match 在 win10 和 ubuntu 上与 python3 的不同结果

转载 作者:太空狗 更新时间:2023-10-29 11:20:49 26 4
gpt4 key购买 nike

我在 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

当我在 win10 和 ubuntu 上以 rb 模式打开文件时,我得到了不同的结果

        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 和其他设置看起来很干净。你遇到过类似的问题吗,你是怎么解决的?提前致谢。 :)

附言使用以 rb 模式打开的任何 torrent 文件进行测试。 (例如 http://releases.ubuntu.com/19.04/ubuntu-19.04-desktop-amd64.iso.torrent)

附言我在 python 2 中没有这个问题。似乎它可能与 newline types 有关,但文件以 rb 模式打开。

更新:通过为 Windows 模式设置 i = -1 来解决问题。似乎问题出在第一个字节上。但是您能解释一下为什么会这样吗?

最佳答案

正如您提到的,它似乎与换行符类型有关。

尝试在打开文件时调用 open() 函数时添加 newline='',这应该会启用通用换行模式。

关于python - re.compile().match 在 win10 和 ubuntu 上与 python3 的不同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58064665/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com