python 匹配文本全角转半角字符「建议收藏」
python,匹配,文本,全角,半角,字符,建议,收藏
2025-04-11 08:58:02 时间
大家好,又见面了,我是你们的朋友全栈君。
在对文本进行处理的时候经常会遇见要对括号和标点进行匹配
常见的英文(半角)符号如( ) 直接用正则匹配即可
但是遇见全角字符(中文括号、标点),直接用正则匹配会存在问题:
因为编码通常为为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.cn/159998.html原文链接:https://javaforall.cn
相关文章
- Python 的数据结构
- python matplotlib 动态图_matplotlib怎么读
- python dataframe 一行变多行
- Python:变量的命名规则
- python dll注入 网络_dll注入
- Python知识点(史上最全)
- python最长回文子串动态规划_最长回文子串问题
- 你一定是在逗我,Python都不会就想做算法?
- python 基尼系数_Python计算
- Python 链接/操作 MongoDB 数据库
- python线程间通信的方式_android 线程间通信
- python中面向对象VS面向过程
- 【水水水文章】用 Python 发邮件
- 修改python的pip源为国内源[通俗易懂]
- python interpolate.interp1d_索引错误scipy.interpolate.interp1d「建议收藏」
- 用Python的好处
- Python与数据库之学员管理系统「建议收藏」
- OpenCV进行人脸识别(Python)
- 使用python进行词频分析
- Python基础24-MySQL模块pymysql