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

您所在的位置:网站首页 英语替换表达式 在python中使用正则表达式实现中英文符号互换

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

2023-10-20 15:56| 来源: 网络整理| 查看: 265

在进行中文信息处理时,经常会发现有人错误地使用了英文半角的标点符号,给下一步处理造成一些麻烦。如果逐个地判断(使用循环方法)后进行替换,是一件非常费时费力的事情;当出现新的情况时,进行程序的更新也比较麻烦。利用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)))

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3