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 正则支持略有差异

相关推荐
香辣西红柿炒蛋1 小时前
yaml文件介绍、数据读取
python
乐于分享的阿乐1 小时前
(二)VSCode搭建python环境(详细图文保姆级教程)
ide·vscode·python
weixin_408099671 小时前
2026 AI生成图片快速去水印的5种实测方法(附在线工具 + Python/Java/PHP API代码)
java·人工智能·python·api接口·ai去水印·石榴智能·自动去水印
2601_961194021 小时前
2026初级会计经济法基础知识点汇总
python·django·pdf·virtualenv·代理模式·pygame
爱就是恒久忍耐1 小时前
Ubuntu解决pip3安装库提示This environment is externally managed的问题
linux·python·ubuntu
花落yu2 小时前
AI学习:第2天
人工智能·python·学习
极光代码工作室2 小时前
基于深度学习的文本自动摘要系统
人工智能·python·深度学习·神经网络
开源量化GO2 小时前
期货量化订不到行情:天勤合约代码与交易所符号写法
python·区块链
机汇五金_2 小时前
LED灯箱架的主要材质有哪些?各有什么特点?
python·材质