python中文数字转阿拉伯数字_Python中文数字(str)转换成阿拉伯数字(int)

该博客介绍了一个Python函数,用于将中文数字字符串(如“五千三百零一”)转换为阿拉伯数字整数。通过使用正则表达式分割和替换,以及预定义的中文数字映射,实现了从亿、万级别到个位数的逐级转换。示例包括“一亿零三百三十万五十”转换为103300050,以及其他不同规模的中文数字转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题:

我需要将中文数字如 “五千三百零一”转换成阿拉伯数字。

解决:

思路:

ab16e5af5c32

代码:

#-*- coding: UTF-8 -*-

import re

import string

common_used_numerals_tmp ={'零':0, '一':1, '二':2, '两':2, '三':3, '四':4, '五':5, '六':6, '七':7, '八':8, '九':9, '十':10, '百':100, '千':1000, '万':10000, '亿':100000000}

uchar = '一亿三千二百四十二万五百二十三'

def chstring2int(uchar):

##1)按亿、万分割字符

sep_char = re.split(r'亿|万',uchar)

total_sum = 0

for i,sc in enumerate(sep_char):

##print("level 1:{}-----{}".format(i,sc))

##2)对每一部分进行转化处理,比如第二部分[ "三千二百四十二"]

split_num = sc.replace('千', '1000').replace('百', '100').replace('十', '10')

int_series = re.split(r'(\d{1,})', split_num)

int_series.append("")

int_series = ["".join(i) for i in zip(int_series[0::2],int_series[1::2])]

int_series = ['零' if i == '' else i for i in int_series]

num = 0

##int_series:["三1000", "二100", "四10", "二"]

##3)求和加总int_series

for ix, it in enumerate(int_series):

it = re.sub('零', '', it) if it != '零' else it

##print("level 2:{}{}".format(ix,it))

temp = common_used_numerals_tmp[it[0]]*int(it[1:]) if len(it)>1 else common_used_numerals_tmp[it[0]]

num += temp

##print("transformed part sum %s"%str(num))

total_sum += num * (10 ** (4*(len(sep_char) - i - 1)))

return total_sum

def test(ch):

print("----------Transform test----------")

print("{}:{}".format(ch,chstring2int(ch)))

test("一亿零三百三十万五十")

test(uchar)

test("三百五十四")

test("二千零三十万零五十")

结果:

=================== RESTART: C:/Python37/uchars2number2.py ===================

----------Transform test----------

一亿零三百三十万五十:103300050

----------Transform test----------

一亿三千二百四十二万五百二十三:132420523

----------Transform test----------

三百五十四:354

----------Transform test----------

二千零三十万零五十:20300050

问题解决!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值