在进行中文信息处理时,经常会发现有人错误地使用了英文半角的标点符号,给下一步处理造成一些麻烦。如果逐个地判断(使用循环方法)后进行替换,是一件非常费时费力的事情;当出现新的情况时,进行程序的更新也比较麻烦。利用unicode编码的规律和正则表达式中的替换(re.sub)功能,可以较为优雅地达到这个目的。

标点符号在unicode中的编码规律

每个符号都有一个唯一的unicode编码,可以通过内置函数ord()进行查询。如:

>>> ord('?')
63

半角符号符号和全角符号的编码有一个规律:英文符号的unicode编码+65248=中文符号的unicode编码。
从编码转到具体的符号,可以使用函数chr()。如:

>>> chr(63)
'?'
>>> chr(63+65248)
'?'

空格除外,具体可查看网址:https://blog.csdn.net/zinnc/article/details/68524551

正则表达式的sub函数

re.sub共有5个参数:
第一个参数是pattern,即要匹配的模式;
第二个参数是repl,即拟替换成的对象,可以是字符串,也可以是函数;
第三个参数是string,即源字符串;
第四个参数是count,即替换的次数,0的话就表示全部替换;
第五个参数是flags,即相应的选项。
具体可参考:https://www.cnblogs.com/nkwy2012/p/6548812.html

本文主要是利用到了第二个参数。代码如下:

#!/usr/bin/env Python3
# -*- encoding:utf-8 *-*
import re
import logging
LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
logging.basicConfig(filename="test.log", level=logging.INFO, format=LOG_FORMAT)s = '上帝说:要有光,于是便有了光!上帝若是不想要光了呢?我想,光可能就会自己消失了(来自于我瞎编的)'
logging.info(s)
s0 = re.sub('([:,!?()])', lambda x: chr(ord(x.group(1))+65248), s)
logging.info(s0)

如此,则有:
替换前:
2019-06-06 13:41:45,039 - INFO - 上帝说:要有光,于是便有了光!上帝若是不想要光了呢?我想,光可能就会自己消失了(来自于我瞎编的)
替换后:
2019-06-06 13:41:45,040 - INFO - 上帝说:要有光,于是便有了光!上帝若是不想要光了呢?我想,光可能就会自己消失了(来自于我瞎编的)

需要注意的是,程序中并没有选取一个unicode编码区间设置匹配模式,目的是为了防止“误伤”。
可以使用如下代码来浏览编码与符号的对应关系:

    for i in range(100):print("%s:%s->%s" % (i, chr(i), chr(i+65248)))

中文符号转英文符号的思路与之相同。

在python中使用正则表达式实现中英文符号互换相关推荐

  1. Python中的正则表达式(翻译自DiveintoPython3)

    Python中的正则表达式(来自Dive into Python3) 利用python提供的最简单的字符串函数index(), find(), split(), count(), replace()等 ...

  2. Python中re(正则表达式)模块函数学习

    2019独角兽企业重金招聘Python工程师标准>>> Python正则表达式指南 今天学习了Python中有关正则表达式的知识.关于正则表达式的语法,不作过多解释,网上有许多学习的 ...

  3. [Python]网络爬虫(七):Python中的正则表达式教程(转)

    接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一下Python中的正则表达式的相关内容. 正则表达式在Python爬虫中的作用就像是老师点名时用的花名册一样,是必不可少的神兵利器. ...

  4. [Python]网络爬虫(七):Python中的正则表达式教程

    接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一下Python中的正则表达式的相关内容. 正则表达式在Python爬虫中的作用就像是老师点名时用的花名册一样,是必不可少的神兵利器. ...

  5. python中的正则表达式是干嘛的_python中正则表达式总结

    re.match():从字符串的开始进行匹配 re.search():扫描整个字符串返回第一个匹配 re.findAll():返回所有匹配的字符串 Pattern 对象不能实例化,只能通过compil ...

  6. Python中利用正则表达式做数据清洗(re)

    目录 1.常用正则表达式 Python中常用正则表达式 2.正则表达式做数据清洗 2.1 从网页HTML标签中提取文本 2.2 去掉英文文章中标点符号,提取词汇 2.3 提取以.com结尾的邮箱 1. ...

  7. 站长在线零基础Python完全自学教程20:在Python中使用正则表达式完全解读

    欢迎你来到站长学堂,学习站长在线出品的在线课程<零基础 Python完全自学教程>今天给大家分享的是第20课< 在Python中使用正则表达式完全解读>.本节课是一个大课,我分 ...

  8. 站长在线Python精讲:在Python中使用正则表达式的sub()方法替换字符串详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中使用正则表达式的sub()方法替换字符串详解>. 在Python中使用正则表达式的sub()方法替换字符串. ...

  9. 站长在线Python精讲:在Python中使用正则表达式的split()方法分割字符串详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中使用正则表达式的split()方法分割字符串详解>. 使用正则表达式分割字符串 在Python中使用正则表达 ...

最新文章

  1. assign 可以修饰对象吗
  2. Avahi DOS攻击broadcast-avahi-dos
  3. 语言撒谎问题_孩子撒谎是高情商?四招帮家长找到孩子撒谎原因,纠正撒谎行为...
  4. Sublime Text 全程指引 by Lucida
  5. 链表之单、双链表反序
  6. 没看过这10本程序员必读烧脑经典,别说你是敲代码的
  7. Possible iteration over unexpected (custom / inherited) members, probably missing hasOwnProperty che
  8. Hadoop! | 大数据百科 | 数据观 | 中国大数据产业观察_大数据门户
  9. Linux 5.10将解决2038年问题
  10. 20135115臧文君---实验2
  11. Java的Interrupt与线程中断
  12. java类的加载,链接,初始化
  13. MySQL Partition扫盲
  14. Python使用matplotlib可视化模拟商场促销价格关系折线图
  15. SQL Server 2008空间数据应用系列十一:提取MapInfo地图数据中的空间数据解决方案...
  16. 好用用的linux 监控命令
  17. UML 类图生成工具simpleUML
  18. WOW 最简单的插件入门,适合不知道怎么创建XML/自己写的插件始终不生效的
  19. 彩信 添加 html,彩信接口 | 微米-中国领先的短信彩信接口平台服务商
  20. Linux Regulator Framework(1) - Framework

热门文章

  1. Arthas watch命令使用
  2. 航海世纪 服务器文件,实时转服重新开放公告-航海世纪-官方网站-游戏蜗牛出品,九年经典航海网游大作,亲身体验加勒比海盗快感...
  3. 公派访问学者也会被拒签吗?
  4. 使用关键点检测打造小工具Padoodle,让涂鸦小人跟随真人学跳舞
  5. CentOS 配置EPEL国内源
  6. 微软Edge浏览器衰落之谜:“自杀”还是“他杀”
  7. IT大佬化身农药英雄,董小姐暴力五杀,称霸峡谷!
  8. 神器| 炫酷!追番神器,不只有追番!
  9. 信用卡APP评测系列——工银e生活5.0打造个人生活服务平台,引领用户美好生活
  10. 各种RNAseq原理