我的个人博客:https://lixiaohui.live
问题:
我需要将中文数字如 “五千三百零一”转换成阿拉伯数字。
解决:
思路:
代码:
#-*- 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
问题解决!
网友评论