2 回答

TA贡献1946条经验 获得超3个赞
Python 3明确区分了原始字节字符串和utf-8字符串。content[line-1]
返回一个数字,可能是0-255-字节,并且您正尝试将其与字符串匹配'\r'
。我同意可以进行转换,但是Python是强类型的,因此无论整数代表什么字符,这都将始终失败。获取byte
与\r
使用相对应的编号:
(content[line-1]) != ord('\r')
并类似地使用字节字符串生成迭代器:
newLinePos = [m.start() for m in re.finditer(b'\n', content)]

TA贡献1818条经验 获得超7个赞
如果你想找到换行/换行的位置(\n)不是一个回车前面的字符(\r),您可以使用一个负 回顾后发 断言正则表达式。
>>> lines = ['foo', 'ba\nr', 'baz', 'quux']
>>> content = '\r\n'.join(lines).encode('utf-8')
>>> content
b'foo\r\nba\nr\r\nbaz\r\nquux'
>>> pattern = b'(?<!\r)\n'
>>> newLinePos = [m.start() for m in re.finditer(pattern, content)]
>>> newLinePos
[7]
>>> content[5:8]
b'ba\n'
有几件事要注意。
content是一个bytes实例;当您以“ rb”模式读取文件时,将获得字节。
pattern 必须是一个字节实例,因为要搜索的序列是一个字节实例。
(?<!\r)\n如果括号(\n)后面的字符前面没有字符,则该模式匹配\r。有关完整说明,请参见re文档。
添加回答
举报