import re

pattern = re.compile('[abc]')

match_result = pattern.match('fabc')

if match_result:

print match_result.group()

search_result = pattern.search('fabc')

if search_result:

print search_result.group()

以上的实现方式需要先编译一个 pattern,然后再进行匹配。实际上,我们可以直接利用 re.match(pattern, string) 函数来实现相同的功能。但是直接匹配的方式没有先编译再匹配的方式灵活,首先是正则表达式没办法重用,如果大量数据进行同一模式匹配,意味着每次都需要内部编译,造成性能损失;另外,re.match()函数没有pattern.match()功能强大,后者可以指定从哪个位置开始匹配。

编码问题

了解 python 正则的基本功能后,剩下的事情就是找到一个合适的正则表达式来匹配生僻字和非法字符。非法字符很简单,采用以下 pattern 就可以实现匹配:

pattern = re.compile(r'[~!@#$%^&* ]')

然而对于生僻字的匹配,着实难倒了我。首先是对于生僻字的定义,什么样的字算生僻字?经过咨询项目经理,规定非 GB2312 的字符属于生僻字。接下来的问题是,如何匹配 GB2312 字符?

经过查询,GB2312 的范围是[\xA1-\xF7][\xA1-\xFE],其中汉字区的范围是[\xB0-\xF7][\xA1-\xFE]。因此,添加生僻字匹配后的表达式为:

pattern = re.compile(r'[~!@#$%^&* ]|[^\xA1-\xF7][^\xA1-\xFE]')

问题似乎是顺理得当地解决了,然而我还是 too simple too naive 。由于要判断的字符串都是从图层文件读取的,arcpy 贴心地将读取的字符编码为 unicode 格式。因此,我需要找出 GB2312 字符集在 unicode 中的编码范围。但现实是,GB2312 字符集在 unicode 中的分布并不是连续的,使用正则表示这个范围必定是非常复杂的。使用正则表达式匹配生僻字的构想,似乎陷入了死胡同。

解决方案

既然提供的字符串是 unicode 格式,那么我可不可以将其转换为 GB2312 再进行匹配呢?实际上是不行,因为 unicode 字符集要远大于 GB2312 字符集,因此 GB2312 => unicode总是可以实现的,而反过来 unicode => GB2312不一定能成功。

这突然为我提供了另外一种思路,假设一个字符串的 unicode => GB2312转换会失败,那么是不是恰恰说明了它不属于 GB2312 字符集?所以,我使用 unicode_string.encode('GB2312') 函数尝试转换字符串,捕获 UnicodeEncodeError 异常来识别生僻字。

最终的代码如下:

import re

def is_rare_name(string):

pattern = re.compile(u"[~!@#$%^&* ]")

match = pattern.search(string)

if match:

return True

try:

string.encode("gb2312")

except UnicodeEncodeError:

return True

return False

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

python生僻字如何转码_Python检测生僻字的实现方法相关推荐

  1. [转载] [转载] python 去除字符串的标点符号 用_Python成为专业人士笔记–String字符串方法

    参考链接: Python字符串| 十六进制 hexdigits 参考链接: Python的字符串Strings decode "专业人士笔记"系列目录: 创帆云:Python成为专 ...

  2. [转载] python 去除字符串的标点符号 用_Python成为专业人士笔记–String字符串方法

    参考链接: Python的字符串Strings decode "专业人士笔记"系列目录: 创帆云:Python成为专业人士笔记--强烈建议收藏!每日持续更新!​zhuanlan.z ...

  3. python合法的变量名有哪些_Python判断变量名是否合法的方法示例

    问题: 变量名是否合法: 1.变量名可以由字母,数字或者下划线组成 2.变量名只能以字母或者下划线开头 s = 'hello@' 判断变量名的第一个元素是否为字母或者下划线 s[0] 如果第一个元素符 ...

  4. python实现自动点击器_Python模拟鼠标点击实现方法(将通过实例自动化模拟在360浏览器中自动搜索python)...

    一.准备工作: 安装pywin32,后面开发需要pywin32的支持,否则无法完成与windows层面相关的操作. pywin32的具体安装及注意事项: 1.整体开发环境: 基于windows7操作系 ...

  5. python正则检验_Python 检测生僻字

    最近碰到一个需求,要求检测字段是否包含生僻字以及一些非法字符如 ~!@#$%^&*. 首先想到的就是利用 python 的正则表达式来匹配非法字符,然后找出非法记录.然而理想总是丰满的,现实却 ...

  6. python 搜索引擎 实验楼的源码_Python语言之简历有错别字被拒绝聘用?文档被领导说?Python实现永无错别字!...

    本文主要向大家介绍了Python语言之简历有错别字被拒绝聘用?文档被领导说?Python实现永无错别字!,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 找出中文错别字 1.5 代 ...

  7. python井字棋游戏代码_python实现井字棋游戏

    python实现井字棋游戏 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  python实现井字棋游戏.txt ] (友情提示:右键点上行txt文档名->目标 ...

  8. python出现套接字创建不成功_python套接字连接在Mac上被拒绝但在Windows

    这不是connection refused的重复.此问题询问MacOS和Windows之间的区别.此外,Mac上的防火墙已关闭. 我正在尝试通过套接字与设备通信.代码用python编写.出于某种原因, ...

  9. python汉字转到ascii码_python中字母与ascii码的相互转换

    在做python编程时,碰到了需要将字母转换成ascii码的,原本以为用Int()就可以直接将字符串转换成整形了,可是int()带了一个默认参数,base=10,这里表示的是十进制,若出现字母,则会报 ...

最新文章

  1. 如何评价CVPR 2021的论文接收结果?
  2. R语言将dataframe宽表转化为长表实战:使用data.table、使用tidyr包gather函数、使用reshape2包
  3. android 新分区 挂载,android 新增分区以及挂载方法-Go语言中文社区
  4. python获取重复元素
  5. SQL Server 2008 R2 隐私声明
  6. 搜索旋转排序数组—leetcode31
  7. windows安装pycocotools错误:cl : Command line error D8021 : invalid numeric argument '/Wno-cpp'
  8. Laravel-admin hasMany表单关联提交报错字段 无详细信息错误说明
  9. shell从小做起:将100以内整除3的数列出来
  10. 枚举变量的重定义问题
  11. 多表利用DIH批量导入数据并建立索引注意事项
  12. 我的YUV播放器MFC小笔记:解析文件名称
  13. lightNLP:框架功能丰富,开箱即用
  14. Linux sites
  15. Java 类加载机制概述、类加载流程、自定义类加载器
  16. IEEE ACCESS
  17. python下载豆丁文档_.NET - edu.docin.com豆丁校园
  18. SQL2008.AdventureWorks_All_datebases x86下载
  19. 51单片机送餐机器人快递机器人_ESP8266_APP_WIFI(原理图+PCB+源码)
  20. 基于FPGA的数字频率计Verilog开发

热门文章

  1. MySQL之初识MySQL
  2. 100句非常经典的读书名言
  3. 【Azure Data Platform】ETL工具(20)——创建Azure Databricks
  4. 学习mysql_day3_高级查询1(聚合查询,聚合统计)
  5. 高一英语计算机课文翻译,高一必修2英语课文翻译之《WHO AM I? 》
  6. 光伏行业十个人的江湖:霸道总裁pk硬汉书生
  7. 解决浏览器滚动条导致的页面闪烁问题
  8. 谈谈我对软件开发项目管理的理解
  9. 人工神经网络 经验公式_不会算工程成本?建筑测算一本通+全套自动计算表,公式可套定额...
  10. 无法安装office此计算机安装了32位,在电脑上安装64位Office2013出错提示找到了32位程序如何解决...