num_str_start_symbol = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9','10']
#more_num_str_symbol = ['零', '一', '二', '两', '三', '四', '五', '六', '七', '八', '九', '十', '百', '千', '万', '亿']
import re
def to_Chiness_num(num):
num_dict = {'1':'一', '2':'二', '3':'三', '4':'四', '5':'五', '6':'六', '7':'七', '8':'八', '9':'九', '0':'零', }
index_dict = {1:'', 2:'十', 3:'百', 4:'千', 5:'万', 6:'十', 7:'百', 8:'千', 9:'亿'}
nums = list(num)
nums_index = [x for x in range(1, len(nums)+1)][-1::-1]
str = ''
for index, item in enumerate(nums):
str = "".join((str, num_dict[item], index_dict[nums_index[index]]))
str = re.sub("零[十百千零]*", "零", str)
str = re.sub("零万", "万", str)
str = re.sub("亿万", "亿零", str)
str = re.sub("零零", "零", str)
str = re.sub("零\\b" , "", str)
print(str)
return str
def changeArabNumToChinese(oriStr):
lenStr = len(oriStr);
aProStr = ''
if lenStr == 0:
return aProStr;
hasNumStart = False; #默认 不含阿拉伯数字
numberStr = '' #默认 不含阿拉伯数字
for idx in range(lenStr): #遍历所有 字符
if oriStr[idx] in num_str_start_symbol: #当前字符 是 阿拉伯数字
if not hasNumStart:
hasNumStart = True;
numberStr += oriStr[idx] #将个位阿拉伯数字 累加到输出字符串
print(numberStr)
else: #当前字符 不是 阿拉伯数字
if hasNumStart: #当前字符不是数字,但是【之前的字符 包含数字】,先把之前的数字进行转换,并累加
numResult = str(to_Chiness_num(numberStr)) # 将之前的阿拉伯数字 转换为 汉字数字
aProStr += numResult #将汉字数字,累加到 输出字符串
numberStr = '' # 数字清空,为了记录下一次的 阿拉伯数字
hasNumStart = False; # 设置为false 恢复到初始值
aProStr += oriStr[idx] #将不是阿拉伯的 当前汉字字符 累加到 输出字符串
pass
if len(numberStr) > 0: # 处理以数字 结尾的情况 ,不能去掉。 '12套餐12'
resultNum = to_Chiness_num(numberStr) # 将汉字数字 转换为 阿拉伯数字
aProStr += str(resultNum)
return aProStr
testStr1 = ['231', '我有213块钱', '12套餐12', '213今天天气真不错',
'80% discount rate很高了', '千万不要',
'我要去西藏17天',
]
for tstr in testStr1:
print(tstr + ' = ' + changeChineseNumToArab(tstr))
将汉字替换为阿拉伯