08 | 应用1:正则如何处理 Unicode 编码的文本?
该思维导图由 AI 生成,仅供参考
Unicode 基础知识
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了如何使用正则表达式处理Unicode编码的文本。首先,文章介绍了Unicode的基础知识,包括字符编码、存储和传输方式。然后,针对在使用Unicode时可能遇到的问题,如编码问题的坑、点号匹配和字符组匹配的问题进行了详细讲解。此外,还介绍了在正则表达式中使用Unicode属性的方法。文章通过示例和测试结果,帮助读者更好地理解和掌握在处理Unicode编码文本时的相关技术特点。 在处理表情符号时,作者不建议使用正则表达式,而是建议使用专门的表情库来处理。这是因为表情符号的复杂性,以及其编码超出了BMP范围,需要4个字节来编码,使得使用正则表达式处理变得不方便。作者还提到了表情符号支持颜色修饰的情况,进一步增加了处理的复杂性。 总的来说,本文通过深入讲解Unicode编码的基础知识和处理技巧,以及对表情符号处理的建议,为读者提供了全面的技术指导。读者可以通过本文了解到在处理Unicode编码文本时的注意事项和技术难点,以及在处理表情符号时的最佳实践建议。
《正则表达式入门课》,新⼈⾸单¥59
全部留言(22)
- 最新
- 精选
- 小乙哥有点看着蒙圈了,unicode和utf-8不都是编码吗?不都是对字符的编码?他们之间的关系没有搞太清楚
作者回复: Unicode只规定了字符对应的码值,如果要进行存储或者网络传输等,这个码值得编码成字节,常见的编码方式是 UTF-8。 在内存中使用的时候可以使用unicode,但存储到硬盘里时就得转换成字节编码形式。
2020-08-25610 - 虹炎我的答案: 客重复3次,如果重复的是最后一个字节,就这样‘极(客){3}’, 给客加个括号分组。 请老师指正?
作者回复: 对的,没问题👍🏻
2020-06-291210 - 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-245 - 天蓬太帅请问例子里有一个表达式是findall(r’(?a)^.$’, ‘学’),这里面的?a是啥意思?
作者回复: 这是一种匹配模式,可以查询下 Python 文档,看下 re 模块的说明。指的是ASCII模式,可以让 \w 等只匹配 ASCII https://docs.python.org/3.8/library/re.html#module-re
2020-07-193 - Blue Dpython2中的str等同于python3中的bytes类型, 而python2中的unicode等于python3中的str类型
作者回复: 是的
2021-10-291 - gszUnicode和gbk编码时,即刻,时间两个词都包含相同的16位数,为什么unicode匹配不了,而gbk的可以匹配?
作者回复: 本质在于,正则是不是能知道哪几个字节要看成一个整体,如果它能认识,就不会识别出错;如果当成了多个单字节字符,就可能出错。
2020-08-201 - jooe感谢老师加了 js 的代码示例,对于不会后端语言的还是很友好的
作者回复: 嗯,看到不少同学留言回复的是 js 代码,就加上了
2020-07-0321 - 好运来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-291 - 宁悦py3下测试 re.findall('极客{3}', '极客客客客气气气') 结果:['极客客客']
作者回复: Python3对unicode支持还是挺好的
2020-06-291 - 盘胧对编码知识一直模棱两可的,顺着这个再梳理一下吧
作者回复: 嗯嗯,编码的知识很基础很重要。搞懂了编码的知识,其他的也容易理解了。
2020-06-291