当前位置: 首页 > news >正文

Python实现全角数字转半角数字的完整教程

文章目录

  • 一、全角与半角数字的区别
  • 二、Python 实现方案
    • 1. 基础转换函数(单字符处理)
    • 2. 批量转换函数(字符串处理)
    • 3. 进阶:结合正则表达式(精准匹配)
  • 三、应用场景
  • 四、注意事项

一、全角与半角数字的区别

全角数字(如12345)是中文排版中的字符,Unicode 编码范围为 U+FF10-U+FF19;半角数字(如 12345)是英文排版字符,编码范围为 U+0030-U+0039。两者仅编码相差 65248(即十进制的 ord('1') - ord('1')),这是转换的核心依据。

二、Python 实现方案

1. 基础转换函数(单字符处理)

通过判断字符是否为全角数字,利用编码差值实现转换:

def full_to_half_digit(char):"""将单个全角数字转为半角,非全角数字返回原字符"""# 判断是否为全角数字if '\uFF10' <= char <= '\uFF19':# 全角转半角:编码值减65248return chr(ord(char) - 65248)return char# 测试
print(full_to_half_digit('1'))  # 输出:1
print(full_to_half_digit('a'))   # 输出:a(非全角数字不转换)

2. 批量转换函数(字符串处理)

结合map()或循环实现整段文本的全角数字批量转换:

def batch_full_to_half(text):"""批量转换文本中的全角数字为半角"""# 方法1:使用map函数(简洁)return ''.join(map(full_to_half_digit, text))# 方法2:使用列表推导式(易理解)# return ''.join([full_to_half_digit(c) for c in text])# 测试案例
test_text = "订单编号:20250819,金额:198元"
result = batch_full_to_half(test_text)
print(result)  # 输出:订单编号:20250819,金额:198元

3. 进阶:结合正则表达式(精准匹配)

若需仅转换特定位置的全角数字(如纯数字字符串),可搭配正则表达式:

import redef regex_full_to_half(text):"""仅转换连续的全角数字序列"""def replace_func(match):return ''.join([chr(ord(c)-65248) for c in match.group()])# 匹配1个以上的全角数字return re.sub(r'[\uFF10-\uFF19]+', replace_func, text)# 测试
test_text = "编码:A12345(全角字母不转换,仅转数字)"
result = regex_full_to_half(test_text)
print(result)  # 输出:编码:A12345(全角字母不转换,仅转数字)

三、应用场景

  1. 数据清洗:处理 Excel/CSV 中导入的全角数字,避免计算错误;

  2. 文本格式化:统一文档中的数字显示格式(如报告、合同);

  3. 接口适配:对接要求半角数字的 API 时,自动转换输入参数。

四、注意事项

  • 全角字母(如ABC)与全角数字编码规则不同,不可直接复用此方法;

  • 若文本包含混合字符(如全角数字 + 符号),需根据需求调整判断逻辑。

http://www.dtcms.com/a/358979.html

相关文章:

  • 一站式可视化运维:解锁时序数据库 TDengine 的正确打开方式
  • 数值分析——算法的稳定性
  • 鸿蒙服务端开发资料汇总
  • 中级统计师-统计实务-第三章 国民经济核算
  • 从支付工具到收益资产:稳定币在 Berachain 上的二次进化
  • 数位 dp
  • 函数(1)
  • React useState基本使用
  • 鸿蒙ArkTS 核心篇-13-if分支语句
  • 玄机靶场 | 第五届红明谷-异常行为溯源
  • Fortran二维数组去重(unique)算法实战
  • WSL使用指南
  • AUTOSAR进阶图解==>AUTOSAR_TR_FrancaIntegration
  • 【超全汇总】MySQL服务启动命令手册(Linux+Windows+macOS)(中)
  • 腾讯云OpenCloudOS 9系统部署OpenTenBase数据库详细教程
  • 轻量xlsx读取库xlsx_drone的编译与测试
  • 关联容器(Associative containers)
  • Windows server 2012安装步骤
  • 为什么要用 Markdown?以及如何使用它
  • 软考备考(5)
  • vite Rendering 10 pagesReferenceError: document is not defined
  • 35.Ansible的yaml语法与playbook的写法
  • Java基础知识(十)
  • 【软考架构】面向服务的体系结构(SOA)深度解析
  • 记IsaacSim中抓取物体的质量物理属性的影响
  • 【智能体】零代码学习 Coze 智能体(2)创建智能体的完整步骤
  • 直线与椭圆相交弦长计算公式
  • K8s服务日志收集方案文档
  • LeetCode 92. 反转链表 II - 算法解析
  • 微服务-ruoyi-cloud部署