正则表达式入门课
涂伟忠
高级研发工程师
24700 人已学习
新⼈⾸单¥59
登录后,你可以任选2讲全文学习
课程目录
已完结/共 18 讲
正则表达式入门课
15
15
1.0x
00:00/00:00
登录|注册

08 | 应用1:正则如何处理 Unicode 编码的文本?

JavaScript
Python2 vs. Python3
编码示例
Python2 vs. Python3
UTF-32
UTF-16
UTF-8
颜色修饰
特点
Unicode Scripts
Unicode Blocks
Unicode Categories
字符组匹配
点号匹配
编码问题的坑
编码方式
Unicode标准
课后思考
总结
表情符号
Unicode属性
正则处理 Unicode
Unicode基础知识
正则处理 Unicode 编码的文本

该思维导图由 AI 生成,仅供参考

你好,我是伟忠。这一节我们来学习,如何使用正则来处理 Unicode 编码的文本。如果你需要使用正则处理中文,可以好好了解一下这些内容。
不过,在讲解正则之前,我会先给你讲解一些基础知识。只有搞懂了基础知识,我们才能更好地理解今天的内容。一起来看看吧!

Unicode 基础知识

Unicode(中文:万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字进行了整理、编码。Unicode 使计算机呈现和处理文字变得简单。
Unicode 至今仍在不断增修,每个新版本都加入更多新的字符。目前 Unicode 最新的版本为 2020 年 3 月 10 日公布的 13.0.0,已经收录超过 14 万个字符。
现在的 Unicode 字符分为 17 组编排,每组为一个平面(Plane),而每个平面拥有 65536(即 2 的 16 次方)个码值(Code Point)。然而,目前 Unicode 只用了少数平面,我们用到的绝大多数字符都属于第 0 号平面,即 BMP 平面。除了 BMP 平面之外,其它的平面都被称为补充平面
关于各个平面的介绍我在下面给你列了一个表,你可以看一下。
Unicode 标准也在不断发展和完善。目前,使用 4 个字节的编码表示一个字符,就可以表示出全世界所有的字符。那么 Unicode 在计算机中如何存储和传输的呢?这就涉及编码的知识了。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何使用正则表达式处理Unicode编码的文本。首先,文章介绍了Unicode的基础知识,包括字符编码、存储和传输方式。然后,针对在使用Unicode时可能遇到的问题,如编码问题的坑、点号匹配和字符组匹配的问题进行了详细讲解。此外,还介绍了在正则表达式中使用Unicode属性的方法。文章通过示例和测试结果,帮助读者更好地理解和掌握在处理Unicode编码文本时的相关技术特点。 在处理表情符号时,作者不建议使用正则表达式,而是建议使用专门的表情库来处理。这是因为表情符号的复杂性,以及其编码超出了BMP范围,需要4个字节来编码,使得使用正则表达式处理变得不方便。作者还提到了表情符号支持颜色修饰的情况,进一步增加了处理的复杂性。 总的来说,本文通过深入讲解Unicode编码的基础知识和处理技巧,以及对表情符号处理的建议,为读者提供了全面的技术指导。读者可以通过本文了解到在处理Unicode编码文本时的注意事项和技术难点,以及在处理表情符号时的最佳实践建议。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《正则表达式入门课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(22)

  • 最新
  • 精选
  • 小乙哥
    有点看着蒙圈了,unicode和utf-8不都是编码吗?不都是对字符的编码?他们之间的关系没有搞太清楚

    作者回复: Unicode只规定了字符对应的码值,如果要进行存储或者网络传输等,这个码值得编码成字节,常见的编码方式是 UTF-8。 在内存中使用的时候可以使用unicode,但存储到硬盘里时就得转换成字节编码形式。

    2020-08-25
    6
    10
  • 虹炎
    我的答案: 客重复3次,如果重复的是最后一个字节,就这样‘极(客){3}’, 给客加个括号分组。 请老师指正?

    作者回复: 对的,没问题👍🏻

    2020-06-29
    12
    10
  • RecordLiu
    解释一下UTF-8的编码规则,会比较好理解文章中提到的Unicode和UTF-8的转化: 对于单个字节的字符,第一位设为 0,后面的 7 位对应这个字符的 Unicode 码点。因此,对于英文中的 0 - 127 号字符,与 ASCII 码完全相同。这意味着 ASCII 码那个年代的文档用 UTF-8 编码打开完全没有问题。 对于需要使用 N 个字节来表示的字符(N > 1),第一个字节的前 N 位都设为 1,第 N + 1 位设为 0,剩余的 N - 1 个字节的前两位都设位 10,剩下的二进制位则使用这个字符的 Unicode 码点来填充。

    作者回复: 感谢分享,大家这部分查一下资料了解下

    2021-03-24
    5
  • 天蓬太帅
    请问例子里有一个表达式是findall(r’(?a)^.$’, ‘学’),这里面的?a是啥意思?

    作者回复: 这是一种匹配模式,可以查询下 Python 文档,看下 re 模块的说明。指的是ASCII模式,可以让 \w 等只匹配 ASCII https://docs.python.org/3.8/library/re.html#module-re

    2020-07-19
    3
  • Blue D
    python2中的str等同于python3中的bytes类型, 而python2中的unicode等于python3中的str类型

    作者回复: 是的

    2021-10-29
    1
  • gsz
    Unicode和gbk编码时,即刻,时间两个词都包含相同的16位数,为什么unicode匹配不了,而gbk的可以匹配?

    作者回复: 本质在于,正则是不是能知道哪几个字节要看成一个整体,如果它能认识,就不会识别出错;如果当成了多个单字节字符,就可能出错。

    2020-08-20
    1
  • jooe
    感谢老师加了 js 的代码示例,对于不会后端语言的还是很友好的

    作者回复: 嗯,看到不少同学留言回复的是 js 代码,就加上了

    2020-07-03
    2
    1
  • 好运来
    print(u'正'.encode('utf-8')) # 全角正则和全角字符串,不能匹配到 print(re.findall(r'\w+', 'abcdef')) # 输出[] # 半角正则和全角字符串,能够匹配到 print(re.findall(r'\w+', 'abcdef')) # 输出['abcdef'] # 半角正则和半角字符串,能够匹配到 print(re.findall(r'\w+', 'abcdef')) # 输出['abcdef'] # 同上 print(re.findall(r'\d+', '123456')) # 输出[] print(re.findall(r'\d+', '123456')) # 输出['123456'] print(re.findall(r'\d+', '123456')) # 输出['123456'] # 同上 print(re.findall(r'\s+', '  ')) # 输出[] print(re.findall(r'\s+', '  ')) # 输出['\u3000\u3000'] print(re.findall(r'\s+', ' ')) # [' '] # “极客{3}”的时候,代表是“客”这个汉字重复 3 次 re.compile(r'极客{3}', re.DEBUG) print(re.findall(r'极客{3}', '极客客客')) # 思考题没有想到好的解决方法 print(re.compile(str(u'极客'.encode('utf-8')[-1:]).replace('b', '')), re.DEBUG)

    作者回复: 动手测试很赞,知识就是在练习中学习和掌握的。 思考题不难,可以参考下其它同学的答案,如果不支持,可以用括号把汉字括起来,这样就是整体重复了

    2020-06-29
    1
  • 宁悦
    py3下测试 re.findall('极客{3}', '极客客客客气气气') 结果:['极客客客']

    作者回复: Python3对unicode支持还是挺好的

    2020-06-29
    1
  • 盘胧
    对编码知识一直模棱两可的,顺着这个再梳理一下吧

    作者回复: 嗯嗯,编码的知识很基础很重要。搞懂了编码的知识,其他的也容易理解了。

    2020-06-29
    1
收起评论
显示
设置
留言
22
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部