python正则表达式匹配中文(Excel如何根据名字匹配编码)

字符串的编码乱码问题由来已久,真的是令人头疼。这不是在做正则匹配中文时候,编码又一次成了拦路虎,在这儿记录两点。第一,字符串编码。第二,正则匹配中文。早期编码都用ASCII编码,用一个字节来处理编码。如大写A编码为65,但处理中文时候,一个字节显然不够,至少两哥字节,还不能和ASCII冲突,,中国制定GB2312编码,把中文编进去。类似的,韩国,日本都出来格子标准,结果就是多语言混合的文本中会

大家好,又见面了,我是你们的朋友全栈君。

###字符串的编码乱码问题由来已久,真的是令人头疼。这不是在做正则匹配中文时候,编码又一次成了拦路虎,在这儿记录两点。第一,字符串编码。第二,正则匹配中文。

早期编码都用ASCII编码,用一个字节来处理编码。如大写A编码为65,但处理中文时候,一个字节显然不够,至少两哥字节,还不能和ASCII冲突,,中国制定GB2312编码,把中文编进去。
类似的,韩国,日本都出来格子标准,结果就是多语言 混合的文本中会出现乱码。
因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
新的问题又出现了:如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。

所以,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间
Python添加对Unicode的支持,以Unicode表示的字符串用u’ABC’来表示。
字符串’xxx’虽然是ASCII编码,但也可以看成是UTF-8编码,而u’xxx’则只能是Unicode编码。
把u’xxx’转换为UTF-8编码的’xxx’用encode(‘utf-8’)方法。

>>> u'ABC'.encode('utf-8')
'ABC'
>>> u'中文'.encode('utf-8')
'\xe4\xb8\xad\xe6\x96\x87

反过来,把UTF-8编码表示的字符串’xxx’转换为Unicode字符串u’xxx’用decode(‘utf-8’)方法。

>>> 'abc'.decode('utf-8')
u'abc'
>>> '\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
u'\u4e2d\u6587'
>>> print '\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
中文

由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;

第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。

关于Python正则表达式匹配中文,其实只要同意编码就行,我电脑用的py2.7,所以字符串前加u,在正则表达式前也加u即可。

str=u"【心理箴言】现实是污浊的河流,要想接受污浊的河流而自身不被污染,我们必须成为大海。 ​​=-=4845/.?'​"

# pattern =re.compile(u'[\u4e00-\u9fa5]')
pattern =re.compile(u"[\u4e00-\u9fa5]+")
result=re.findall(pattern,str)
# print result.group()
for w in result:
    print w

这里写图片描述
更加详细正则匹配内容,可以看看这篇博文

内容参考:廖雪峰大神的博文
知乎上的回答:Unicode和UTF-8有何区别?链接

补充:

今天偶然看见篇博文,对python2.7编码错误与原理分析很到位。PYTHON-进阶-编码处理小结

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128943.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • APK 签名详解

    APK 签名详解1.签名的意义  为了保证每个应用程序开发商合法ID,防止部分开放商可能通过使用相同的PackageName来混淆替换已经安装的程序,我们需要对我们发布的APK文件进行唯一签名,保证我们每次发布的版本的一致性。2.签名对你的App的影响。   你不可能只做一个APP,你可能有一个宏伟的战略工程,想要在生活,服务,游戏,系统各个领域都想插足的话,你不可能只做一个APP,谷歌建议你把你所有的

  • java锁升级过程

    java锁升级过程java中对象锁有4种状态:(级别从低到高)1.无锁状态2.偏向锁状态3.轻量级锁状态4.重量级锁状态对象头分两部分信息,第一部分用于存储哈希码、GC分代年龄等,这部分数据被称为”MarkWord”。在32位的HotSpot虚拟机中对象未被锁定的状态下,MarkWord的32bit空间中的25bit用于存储对象哈希码,4bit用于存储对象分代年龄,2bit用于存储锁标志位,1bit固…

  • CloudSim资源调度「建议收藏」

    CloudSim资源调度「建议收藏」    本菜鸡的毕业设计选择的就是面向数据中心能耗优化的粒子群算法的设计与实现,别问我为啥选这个,我也不知道,在网上查询了很多之后发现也就GitHub上面就4个项目,好像也就第四能用。然后就是YouTube上面有一个印度小哥的视频,做了一个高大上的界面,用的InternetTopologyZoo做了一个界面,非常酷眩,然而没有源代码,全程是成果展示,心痛的要死。但是仅仅是云任务调度,而这…

    2022年10月13日
  • sqoop从mysql导入hive parquet表timestamp,decimal转换问题

    sqoop从mysql导入hive parquet表timestamp,decimal转换问题

  • 从头开始学MySQL——-存储过程与存储函数(1)

    从头开始学MySQL——-存储过程与存储函数(1)10.1.1创建存储过程存储过程就是一条或者多条SQL语句的集合,可以视为批文件。它可以定义批量插入的语句,也可以定义一个接收不同条件的SQL。创建存储过程的语句为CREATEPROCEDURE,创建存储函数的语句为CREATEFUNCTION。调用存储过程的语句为CALL。调用存储函数的形式就像调用MyS……

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号