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)


相关推荐

  • 游戏手机平台简单介绍

    游戏手机平台简单介绍由于手机游戏市场的巨大潜力和无限商机,许多厂商纷纷推出功能强大的手机并提供开放应用平台,而相关手机游戏开发商也是相继投入,与手机厂商或运营商者合作,推出各种跨平台的解决方案。从最早的内嵌式游戏到最新的3D游戏基于各种技术和平台的手机游戏也是分类繁多,为了让读者更好了解各个游戏平台的特点和主要功能,我们将通过下文对目前市面上流行的手机游戏平台做一个简单的介绍。嵌入/内置式游戏

  • 【PLSQL】package包的使用

    【PLSQL】package包的使用

    2021年12月16日
  • 帮谷歌推广Webp图片格式之:Webp的格式转换

    帮谷歌推广Webp图片格式之:Webp的格式转换

  • t检验和u检验_均匀性检验界值表

    t检验和u检验_均匀性检验界值表常用显著性检验适用于计量资料、正态分布、方差具有齐性的两组间小样本比较。包括配对资料间、样本与均数间、两样本均数间比较三种,三者的计算公式不能混淆。应用条件与t检验大致相同,但t′检验用于两组间方差不齐时,t′检验的计算公式实际上是方差不齐时t检验的校正公式。应用条件与t检验基本一致,只是当大样本时用U检验,而小样本时则用t检验,t检验可以代替U检验。用于正态分布、方差齐性的多组间计量比较。常见的…

    2022年10月31日
  • linux 命令route add default dev eth0和route add default gw eth0的区别?[通俗易懂]

    linux 命令route add default dev eth0和route add default gw eth0的区别?[通俗易懂]本机以太网卡eth0的IP地址为手动配置:网关IP地址为192.168.1.1/24#ifconfigeth0192.168.1.100netmask255.255.255.0  #routeadddefaultdeveth0           //默认路由,将去往未知网络的数据包全部从接口eth0发出去测试结果为ping外网失败;[root@localh

  • AsyncSocket长连接棒包装问题解决

    AsyncSocket长连接棒包装问题解决

发表回复

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

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