You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.<em>)<br> (-\ located\ in\ )<br> (?P<city>\w</em>)<br> ( ,\ )<br> (?P<state>\w*)"""</p> <pre class="hljs"><code class="language- volc-pre-code"> # 修正后可运行代码 ```python import re # 修正了分组笔误的正则规则 pattern = """ (?P<title>.*) (-\ located\ in\ ) (?P<city>\w*) ( ,\ ) (?P<state>\w*)""" # 将bytes类型的待匹配内容解码为字符串,编码按实际场景替换 wiki = wiki.decode("utf-8") for item in re.finditer(pattern, wiki, re.VERBOSE): print(item.groupdict()) </code></pre> <p>内容的提问来源于stack exchange,提问作者mortuza amin</p>

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 02:39:33