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

2020-04-29  本文已影响0人  slixiaohui

我的个人博客: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

问题解决!

上一篇下一篇

猜你喜欢

热点阅读