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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • xshell安装步骤_Xshell怎么使用

    xshell安装步骤_Xshell怎么使用XShell可以在Windows界面下来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。它支持RLOGIN、SFTP、SERIAL、TELNET、SSH2和SSH1,可以非常方便的对Linux主机进行远程管理。除此之外,其还有丰富的外观配色方案以及样式选择。Xshell免费版官网下载地址https//www.xshell.com/zh/free-for-home-school/链接https//pan.baidu.com/s/1NJGWZHkByakOkQpKfkc7Yg。…

    2025年9月5日
    43
  • 微信小程序上传图片失败总结[通俗易懂]

    微信小程序上传图片失败总结[通俗易懂]错误:selfsignedcertificate这个是请求地址需要输第三方认证的域名,这个需要后端人员配置。错误:微信开发工具上可以上传图片,但是到体验版不行提示请求失败这个应该是在微信公众号平台里配置uploadFile合法域名…

    2022年6月18日
    198
  • matlab流场可视化后处理「建议收藏」

    matlab流场可视化后处理「建议收藏」matlab流场可视化后处理1流体中标量的可视化1.1云图1.2切片图绘制1.3三维等值面图绘制2流体中矢量的可视化2.1箭头图或速度图2.2流线图2.4带节点的流线图2.5流管图和流带图2.6圆锥体图2.7粒子动画图3参考链接1流体中标量的可视化流体力学中常见的标量为位置、速度绝对值、压强等。1.1云图常用的云图绘制有pcolor、image、imagesc、imsh…

    2025年6月16日
    3
  • 做oj好还是做leetcode好_序列的子序列

    做oj好还是做leetcode好_序列的子序列给出矩阵 matrix 和目标值 target,返回元素总和等于目标值的非空子矩阵的数量。子矩阵 x1, y1, x2, y2 是满足 x1 <= x <= x2 且 y1 <= y <= y2 的所有单元 matrix[x][y] 的集合。如果 (x1, y1, x2, y2) 和 (x1’, y1’, x2’, y2’) 两个子矩阵中部分坐标不同(如:x1 != x1’),那么这两个子矩阵也不同。示例 1:输入:matrix = [[0,1,0],[1,1,1],

    2022年8月9日
    5
  • VS PDB文件详解

    VS PDB文件详解转自https://blog.csdn.net/feihe0755/article/details/54233714PDB文件的介绍PDB(ProgramDataBase),意即程序的基本数据,是VS编译链接时生成的文件。PDB文件主要存储了VS调试程序时所需要的基本信息,主要包括源文件名、变量名、函数名、FPO(帧指针)、对应的行号等等。因为存储的是调试信息,所以一般情况下PDB…

    2022年5月5日
    144
  • js正则截取指定字符串_java正则表达式提取字符串

    js正则截取指定字符串_java正则表达式提取字符串一、javascript正则表达式的基本知识1javascript正则对象创建和用法声明javascript正则表达式varreCat=newRegExp(“cat”);你也可以varreCat=/cat/;//Perl风格(推荐)2学习最常用的testexecmatchsearchreplacesplit6个方法1)test检查指定的字符串是否存在vardata=“123123″;varreCat=/123/gi;alert(r

    2026年1月30日
    3

发表回复

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

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