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

如何在Python中统计含转义字符的字符串实际长度?

问题描述

现有字符串 x = '1aΘ δ3s',需要仅通过代码统计其长度,不允许手动在字符串前添加r前缀。尝试了以下代码:

x = '1a\u0398\t\u03B43s'
decoded_s = x.encode().decode('unicode_escape')
print(f'Symbols: {len(decoded_s)}'))

但返回结果为9,预期长度应为18,求正确解决方法。

解决方法

你的代码问题出在:x.encode().decode('unicode_escape') 会把字符串里的转义字符(比如\u0398、\t)解析成单个Unicode字符,反而让长度变短。要得到预期的18,需要把字符串里的每个转义序列(比如\u0398拆成\、u、0、3、9、8这些独立字符)当作单独元素统计。

正确做法是通过编码转换保留所有转义字符的原始组成:

x = '1a\u0398\t\u03B43s'
# 将转义序列拆分为原始字符,而非解析成单个Unicode符号
raw_str = x.encode('raw_unicode_escape').decode('utf-8')
print(f'Symbols: {len(raw_str)}')  # 输出18

原理说明:

  • encode('raw_unicode_escape') 会把字符串中的Unicode转义序列转换成对应的ASCII字符序列,比如把\u0398拆成\、u、0、3、9、8六个独立字符,而非合并成单个希腊字母Θ。
  • 再通过decode('utf-8')转回字符串后,所有转义组成部分都成为独立的统计单元,最终长度即为18。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:57:03