Python re正则报错:无法在bytes-like对象上使用字符串模式
报错原因
触发string manipulation error: cannot use a string pattern on a bytes-like object的核心原因是:传入re.finditer的正则匹配规则pattern为普通字符串(str)类型,但待匹配对象wiki是字节(bytes)类型。Python标准库re模块要求匹配模式与待匹配内容的类型必须一致,不支持用字符串规则匹配字节类对象。
另外代码中的正则存在一处笔误:州字段的命名分组写法错误,将(?P<state>\w*)错写为(P?<state>\w*),即便解决类型问题,该分组也无法正常捕获内容。
解决方案
两种方案选其一即可,优先选择第一种,字符串模式的正则兼容性更好,适配特殊字符更方便:
- 方案1:将字节类型的
wiki解码为字符串类型
如果wiki是网络请求返回的内容,直接使用响应对象的.text属性(会自动按响应头编码解析为字符串)替代返回bytes类型的.content即可;如果已经拿到bytes对象,手动指定对应编码解码即可:# 编码值根据内容实际编码调整,通用场景多为utf-8 wiki = wiki.decode("utf-8") - 方案2:将匹配规则改为字节类型
在正则字符串前加b前缀,让pattern类型与待匹配的bytes类型保持一致,注意该写法下正则内的所有字符需要满足ASCII兼容:pattern = b"""
(?P
相关产品推荐
相关产品推荐

