python中,str.isnumeric可以判别字符串是否为数字,包括中文字符也可以正常判断,例如:
str.isnumeric('伍拾叁')
str.isnumeric('五十三')
结果都返回True
但对于这些unicode的字符,单个字符可以通过unicodedata.numeric转换为数值,长字符串就不行了。
查阅了各位大神的汉字转数值实现,总觉得不那么符合我的思路,这里我提出一种思路来解决这种问题。
代码如下(注:以下代码仅用于示例,未进行异常判断和出错处理):
# HZToNumber也可以用如下代码实现,以解决大写中文汉字(如壹贰叁)的问题
# import unicodedata
# unicodedata.numeric(hz)
def HZToNumber(hz):
return '零一二三四五六七八九'.find(hz)
splits_ch = ('亿', '万', '千', '百', '十')
splits_val = (100000000, 10000, 1000, 100, 10)
def Word2Number(word, split_idx = 0):
split_ch = self.splits_ch[split_idx]
split_val = self.splits_val[split_idx]
pos = word.find(split_ch)
if pos >= 0:
left = word[:pos]
right = word[pos+1:]
if not left: