如何高效替换字符串中的\uXXXX转义字符(不转换\n\r等转义序列)
如何高效替换字符串中的\uXXXX转义字符(不转换\n\r等转义序列)
我太懂这种两难的处境了——想用unicode_escape直接解码吧,它连\n、\r这些你想原封不动保留的转义也一并转了;自己写个循环逐字节处理吧,数据量一大就慢得让人抓头发。
你原来的while循环代码最大的问题在于,每次用new_content += ...拼接字节串时,都会创建新的字节串对象,内容越长,重复分配内存的开销就越大,效率自然上不去。给你推荐个高效得多的方案:用正则表达式精准匹配替换!
高效实现代码
import re def fast_transform_backslash_u(content): # 匹配字节串中的\uXXXX格式转义(注意双反斜杠是字节串的转义写法) u_escape_pattern = re.compile(b'\\\\u[0-9a-fA-F]{4}') # 对每个匹配到的\uXXXX片段单独解码再编码 def replace_match(match_obj): return match_obj.group().decode('unicode_escape').encode('utf-8') # 批量替换所有匹配项 return u_escape_pattern.sub(replace_match, content)
为什么这个方法更好?
- 正则的匹配逻辑是底层C实现的,比纯Python写的while循环快得多,处理大文本时性能差距会特别明显
- 精准锁定
\uXXXX格式的转义,完全不会碰\n、\r这类你想保留的转义序列 - 内部的替换逻辑是批量处理,内存利用比手动拼接字节串高效太多
测试示例
拿个例子试试效果:
test_data = b'Hi\\u4F60\\u597D! Here is\\na test line with\\ra carriage return.' output = fast_transform_backslash_u(test_data) print(output.decode('utf-8'))
输出结果是:
Hi你好! Here is\na test line with\ra carriage return.
可以看到\u4F60和\u597D成功转成了汉字“你好”,而\n和\r完完整整保留了下来,完美符合你的需求~
备注:内容来源于stack exchange,提问作者白鳥鵠
相关产品推荐
相关产品推荐

