Unicode 正则表达式开发指南

前言

正则表达式是文本处理的核心工具,但传统正则在处理多语言、多字符集时常常力不从心。Unicode 正则通过标准化的字符属性分类,让跨语言文本匹配、清洗、提取变得精准可靠。

以下将基于 Unicode 官方规范与工程实践,系统梳理 Unicode 属性、子属性、语言脚本、编码区块,提高掌握国际化文本处理能力。


一、为什么要用 Unicode 正则

  • 传统正则只能匹配有限字符,无法覆盖全语种

  • 统一匹配中文、日文、阿拉伯文、符号、数字、标点

  • 精准过滤控制字符、空白符、特殊符号

  • 天然兼容 UTF‑8/UTF‑16,适合现代应用文本治理


二、Unicode 基础属性分类(\p {...})

Unicode 把所有字符分为7 大核心类别,是最常用的匹配维度。

  1. \p{L} / Letter:字母类(含中英日韩等所有文字)

  2. \p{M} / Mark:修饰符号(重音、变音、声调)

  3. \p{Z} / Separator:分隔符(空格、换行、段落分隔)

  4. \p{S} / Symbol:符号(货币、图标、图形、运算符)

  5. \p{N} / Number:数字(阿拉伯数字、罗马数字等)

  6. \p{P} / Punctuation:标点符号

  7. \p{C} / Other:控制字符、未分配字符等


三、常用子属性

1. Letter 子类

  • \p{Ll}:小写字母

  • \p{Lu}:大写字母

  • \p{L&}:Ll+Lu+Lt(大小写字母合集)

  • \p{Lo} :无大小写文字(中文、日文、韩文、阿拉伯文

2. Separator 子类

  • \p{Zs}:空格类空白

  • \p{Zl}:行分隔符 U+2028

  • \p{Zp}:段落分隔符 U+2029

3. Number 子类

  • \p{Nd}:0-9 阿拉伯数字

  • \p{Nl}:罗马数字

  • \p{No}:上标、下标、特殊数字符号

4. Punctuation 子类

  • \p{Pd}:横杠 / 连接符

  • \p{Ps} / \p{Pe}:开括号 / 闭括号

  • \p{Pi} / \p{Pf}:前引号 / 后引号

  • \p{Pc}:连接标点(如下划线)

  • \p{Po}:其他标点(!@#$%^&* 等)


四、Unicode Script:按语言匹配

\p{Script} 精准匹配某一语言文字,是中文 / 多语言处理必备。

常用脚本:

  • \p{Han}:汉字(最常用)

  • \p{Latin}:拉丁字母

  • \p{Cyrillic}:西里尔字母

  • \p{Arabic}:阿拉伯文

  • \p{Thai}:泰文

  • \p{Hiragana}:日文平假名

  • \p{Katakana}:日文片假名

  • \p{Hangul}:韩文

示例:只提取汉字

python 复制代码
import regex
regex.findall(r'\p{Han}', '孔子/现代价值/Theory of "Knowing"')
# 结果:['孔','子','现','代','价','值']

五、Unicode Block:按编码区间匹配

按 Unicode 编码段匹配,适合更底层的字符范围控制。

常用区块:

  • \p{InBasic_Latin}:U+0000--U+007F

  • \p{InCJK_Unified_Ideographs}:U+4E00--U+9FFF(常用汉字)

  • \p{InCJK_Symbols_and_Punctuation}:U+3000--U+303F(中文标点)

  • \p{InHalfwidth_and_Fullwidth_Forms}:U+FF00--U+FFEF(全角符号)


六、常用表达式

1.只保留文字,去除数字、符号、标点

python 复制代码
regex.sub(r'[^\p{L}]', '', '1孔子/现代价值/Theory of "Knowing')
# 输出:孔子现代价值TheoryofKnowing

2.只提取中文

python 复制代码
regex.findall(r'\p{Han}+', text)

3.清洗所有空白符(含全角空格)

python 复制代码
regex.sub(r'\p{Z}+', ' ', text)

4.移除所有标点符号

python 复制代码
regex.sub(r'\p{P}', '', text)

5.只保留字母 + 数字

python 复制代码
regex.sub(r'[^\p{L}\p{N}]', '', text)

七、使用注意事项

  1. Python 内置 re 不支持 Unicode 属性,用 regex 库

    bash 复制代码
    pip install regex
  2. 大小写敏感:\p{Han} 正确,\p{han} 无效

  3. 反向匹配用 \P{...}(大写 P)

  4. ES、Java、Go 等语言对 Unicode 正则支持略有差异

相关推荐
学测绘的小杨5 小时前
CompassFusion:一个从 GNSS 到 GNSS/INS 组合导航的独立工程包
python
zzzzzz31011 小时前
当产品经理说这个很简单:我用Python自动化处理奇葩需求的实战指南
python·pycharm·产品经理
雪隐12 小时前
个人电脑玩AI-06让5060 Ti给你打工——不光能画画,Qwen3-TTS还能学人说话,连我老板都信了!
人工智能·后端·python
兵慌码乱1 天前
面向桌面端的资产管理系统分层架构设计与核心模块实现
python·系统架构·sqlite·pyqt5·数据库设计·桌面应用开发·mvc架构
hboot1 天前
AI工程师第三课 - 机器学习基础
python·scikit-learn·kaggle
顾林海1 天前
Agent入门阶段-编程基础-Python:流程控制
python·agent·ai编程
呱呱复呱呱1 天前
Django CBV 源码解读:一个请求是怎么找到你的 get() 方法的
python·django
曲幽2 天前
刚部署的 LibreTranslate 频频翻车?我掏出了 20 年前的 StarDict 词典,用 FastAPI 搭了个本地词典翻译 API
python·fastapi·web·translate·goldendict·libretranslate·stardict·pystardict
荣码2 天前
用Streamlit给AI应用套个界面,10行代码出Web页面
java·python
兵慌码乱2 天前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·sqlite·信号与槽·pyqt5·数据库设计·桌面应用开发·事务处理