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

为何用十六进制\x42搜索字符串无法匹配星号字符?

问题原因与解决方法

首先你犯了一个关键错误:\x42并不是星号*的ASCII十六进制编码。

正确的ASCII对应关系

  • # 的ASCII十进制是35,十六进制为23,所以\x23确实对应#,这也是你能匹配到目标行的原因。
  • * 的ASCII十进制是42,对应的十六进制是2A,而\x42对应的是大写字母B——你的DataFrame里根本没有包含B的行,自然返回空结果。

正确的十六进制匹配写法

用\x2A代替\x42,就能正常匹配到带*的行:

print(df.loc[ df['foo'].str.contains('\x2A') ])

执行后会得到预期输出:

id foo
1   1  2*
3   3  4*

补充:直接用\*能成功的原因

因为*在正则表达式中是特殊元字符(表示匹配前一个元素0次或多次),所以你需要用\*转义它,让它被当作普通字符处理。如果你不想用正则,也可以给contains传入regex=False参数,直接搜索原字符:

print(df.loc[ df['foo'].str.contains('*', regex=False) ])

内容的提问来源于stack exchange,提问作者user15260458

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:30:05