美文网首页
Python中文数字(str)转换成阿拉伯数字(int)

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

作者: slixiaohui | 来源:发表于2020-04-29 14:23 被阅读0次

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

    问题解决!

    相关文章

      网友评论

          本文标题:Python中文数字(str)转换成阿拉伯数字(int)

          本文链接:https://www.haomeiwen.com/subject/irwgwhtx.html