python 匹配文本全角转半角字符「建议收藏」

python 匹配文本全角转半角字符「建议收藏」在对文本进行处理的时候经常会遇见要对括号和标点进行匹配常见的英文(半角)符号如()直接用正则匹配即可但是遇见全角字符(中文括号、标点),直接用正则匹配会存在问题:因为编码通常为为utf8,若直接匹配,中文括号的3字节编码会和一些中文的字节编码重复,产生意想不到的结果若用decode转为unicode编码,则可避免产生错误结果,但也无法直接用正则匹配到经过试验,发现一个看上去

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

在对文本进行处理的时候经常会遇见要对括号和标点进行匹配

常见的英文(半角)符号如( ) 直接用正则匹配即可

但是遇见全角字符(中文括号、标点),直接用正则匹配会存在问题:

因为编码通常为为utf8,若直接匹配,中文括号的3字节编码会和一些中文的字节编码重复,产生意想不到的结果

若用decode转为unicode编码,则可避免产生错误结果,但也无法直接用正则匹配到

经过试验,发现一个看上去最佳的解决方法:

将字符串decode之后调用一个将全角符号转为半角符号的方法,然后处理返回的字符串

def strQ2B(ustring):    """全角转半角"""    rstring = ""    for uchar in ustring:        inside_code=ord(uchar)        if inside_code == 12288:                              #全角空格直接转换            inside_code = 32        elif (inside_code >= 65281 and inside_code <= 65374): #全角字符(除空格)根据关系转化            inside_code -= 65248        rstring += unichr(inside_code)    return rstringdef p(s):    s1 = strQ2B(s.decode())    p = re.compile('[()]',re.S)    s1 = p.sub('',s1)    return s1

这种方法本质上就是将正则的pattern字符和目标的编码对应, 所以将正则的字符串也用unicode表示就好可以:如下

#!/usr/bin/env python#-*- coding: utf-8 -*-import sysreload(sys)sys.setdefaultencoding('utf8')import reif __name__ == '__main__':    s = '123(45)a啊速度(伤害)有限公司'    ss = re.sub(u'[()()]', '', s.decode())    print ss

总的来说 两种方法都还是有必要存在的。

第二种方法简单直接 如果能快速方便列出所有形式的待匹配符号,就果断选用第二个

反之,若待匹配的各种符号太多太繁琐,就统一转为半角再处理更好

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159998.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • configparser.nosectionerror_sqlsession was not registered

    configparser.nosectionerror_sqlsession was not registered在ASP.NETCore中如果在DataProtection中使用了PersistKeysToFileSystem或PersistKeysToFileSystemservices.AddDataProtection().PersistKeysToFileSystem();services.AddDataProtection().PersistKeysToRedis();会在日…

    2022年9月18日
  • Redis 集群搭建

    Redis集群搭建前言最近通过看视频学习了一下Redis,前天使用CentOS7配置了一下Redis4.0.9单机版(相关链接:CentOS7配置Redis4.0.9),今天则通过之前的笔记,视频以及redis官网上集群搭建的教程(https://redis.io/topics/cluster-tutorial)的资料来搭建一下Redis集群。…

    2022年4月7日
  • 角点检测方法_什么叫五点取样法

    角点检测方法_什么叫五点取样法目录原理讲解【1】为何选取角点作为特征?【2】角点的定义:【3】判断角点的方法:【4】Harris角点检测法示例Opencv自带函数:cornerHarris()函数示例程序1示例程序2原理讲解【1】为何选取角点作为特征?角点是一种局部特征。角落上的可区分性特别强,边缘次之,平滑区域则基本没有区分性。【2】角点的定义:【3】判断角点的方法:这里有个细节:将计算的所有方向上的变化……

    2022年10月21日
  • ubuntu外接显示器无信号_ubuntu笔记本外接显示器

    ubuntu外接显示器无信号_ubuntu笔记本外接显示器Overview 主机配置 启用远程控制 安装软件和支持 其它 注意事项 Reference 主机配置系统:Ubuntu18.04 显卡:Intel集成显卡启用远程控制首先要确保开机能够自动启动远程控制。Ubuntu18自带远程桌面控制服务软件;这里不具体写步骤,自行上网搜索。确保上述远程桌面控制能够开机自启动!!!确保上述远程桌面控制能够开机自启动!!!确保上述远程桌面控制能够开机自启动!!!Ubuntu18自带的远程桌面控制

    2022年8月21日
  • JSP的原生Ajax与解析Json

    JSP的原生Ajax与解析JsonJSP的原生Ajax与解析Json

    2022年4月22日
  • 参数化(一):计划缓存

    参数化(一):计划缓存

    2021年11月26日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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