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(全角字母不转换,仅转数字)
三、应用场景
-
数据清洗:处理 Excel/CSV 中导入的全角数字,避免计算错误;
-
文本格式化:统一文档中的数字显示格式(如报告、合同);
-
接口适配:对接要求半角数字的 API 时,自动转换输入参数。
四、注意事项
-
全角字母(如ABC)与全角数字编码规则不同,不可直接复用此方法;
-
若文本包含混合字符(如全角数字 + 符号),需根据需求调整判断逻辑。