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

Python正则拆分中文字符串时生僻字拆分不一致如何调整规则?

问题原因

你当前正则中使用的\u4E00-\u9FD5仅覆盖了CJK统一表意文字基本区的常用汉字,而“𩾃”属于CJK统一表意文字扩展B区,编码为U+29F83,不在你定义的字符范围内,因此正则会将其判定为非匹配字符,导致“𩾃鱼”被拆分为两段。

解决方案

方案1:使用Unicode字符属性匹配(推荐)

Python 3.11及以上版本的标准库re已经支持Unicode属性转义,你可以用\p{Unified_Ideograph}匹配所有中日韩统一表意汉字(包含所有扩展区的生僻字),修改后的正则如下:

import re
re_default = re.compile(r"([\p{Unified_Ideograph}a-zA-Z0-9+#&._%\-]+)", re.U)

如果你的Python版本低于3.11,可以安装第三方regex库,其用法和标准re完全一致,同样支持\p语法,兼容性更好。

方案2:手动补全CJK汉字编码范围

如果不想额外安装依赖,也可以把所有CJK汉字的编码范围手动加到正则的字符组中,完整覆盖常用生僻字的编码范围如下:

  • 基本区:\u4E00-\u9FFF
  • 扩展A区:\u3400-\u4DBF
  • 扩展B区:\U00020000-\U0002A6DF
  • 扩展C区:\U0002A700-\U0002B73F
  • 扩展D区:\U0002B740-\U0002B81F
  • 扩展E区:\U0002B820-\U0002CEAF
  • 扩展F区:\U0002CEB0-\U0002EBEF

修改后的正则如下:

import re
re_default = re.compile(r"([\u4E00-\u9FFF\u3400-\u4DBF\U00020000-\U0002A6DF\U0002A700-\U0002B73F\U0002B740-\U0002B81F\U0002B820-\U0002CEAF\U0002CEB0-\U0002EBEFa-zA-Z0-9+#&._%\-]+)", re.U)

修改完成后再次测试,“𩾃鱼”的拆分结果就会和“兰蔻”一致,输出为['', '𩾃鱼', '']。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 01:18:03