博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用Python转换一些常见全角字符为半角
阅读量:6712 次
发布时间:2019-06-25

本文共 1206 字,大约阅读时间需要 4 分钟。

前言

最近在爬日文小说的过程中,经常遇到全角(甚至和和半角混用),造成我(强迫症)强烈不适,就着手专门写一个脚本处理之

思路

首先在网上寻找看是否已经有现成库/脚本能做到,寻找一番之后只找到一些思路文章,这里就不重复了

有一点要注意,不少文章里是python2的情况,里面用的是unichr函数,到python3就变成了chr函数
直接看代码吧

def SBC2DBC(char):    chr_code = ord(char)    # 处理全角中数字大等于10的情况    if chr_code in range(9312, 9332):        return str(chr_code - 9311)    elif chr_code in range(9332, 9352):        return str(chr_code - 9331)    elif chr_code in range(9352, 9372):        return str(chr_code - 9351)    elif chr_code in range(8544, 8556):        return str(chr_code - 8543)    else:        if chr_code == 12288: # 全角空格,同0x3000            chr_code = 32        if chr_code == 8216 or chr_code == 8217:  # ‘’            chr_code = 39 # '        elif chr_code in range(65281, 65374):            chr_code = chr_code - 65248        return chr(chr_code)def SBC2DBC_string(string):    new_string = ''    for char in string:        new_string += SBC2DBC(char)    return new_string

网上大部分文章里只有全角空格和range(65281,65374)的情况,我时不时能遇到一些比较奇怪的全角数字,比如⑩ ⑽ ⒑ Ⅻ,这里也一并处理了

扩展思考

1 . 某些情况下全角反而是更好的选择,比如文件名,其不能用*:/等符号,全角就更适合,当然这属于另一个话题,就不在此展开

2 . 罗马数字的情况,在现有的全角字符中罗马数字仅到12,如果某位(丧心病狂的)作者用了多个罗马数字的话,比如ⅩⅤ,上面的脚本就不合适了(就转成105),这时候需要先对整个字符串进行处理,找到连接在一起的罗马数字,然后计算并替换,这更像是数据清洗的范畴,也不展开多说了

转载地址:http://tealo.baihongyu.com/

你可能感兴趣的文章
后端架构师技术图谱
查看>>
快速掌握:大型分布式系统中的缓存架构
查看>>
redis系列:分布式锁
查看>>
ES6(Proxy 和 Reflect)
查看>>
spring+springMVC+mybatis的整合 part1
查看>>
[Spark]Spark Streaming 指南四 输入DStreams和Receivers
查看>>
Android Recyclerview 实现画廊功能
查看>>
Integer 与 Long 数字类型的比较:Java与Kotlin的细节不同
查看>>
官宣!vue.ant.design 低调上线
查看>>
云用户生态发展论坛暨第三届中国云计算用户大会北京站盛大召开
查看>>
Emulator 29.0.3 Canary 发布,Android 模拟器
查看>>
总结一波安卓组件化开源方案
查看>>
oss-server 简单对象存储系统
查看>>
使用fastcgi_finish_request提高页面响应速度
查看>>
javascript成神之路(4):深入理解this关键字,是的就是this
查看>>
Flink1.4 Fault Tolerance源码解析-1
查看>>
Spring Cloud配置中心
查看>>
React 路由状态管理总结
查看>>
JAVA 几种引用类型学习
查看>>
Android WindowManager悬浮窗:不需要申请权限实现悬浮
查看>>