Python中如何将twenty two类英文数字字符串转换为数值
Python 实现英文数词字符串转对应数值的方案
简单场景自定义实现(无第三方依赖)
这种方案适合处理0-99范围的基础数词,逻辑轻量,完全匹配已拆分表达式列表的处理需求。
- 先构建基础数词和数值的映射字典,覆盖常用的个位数、整十数、11-19的特殊表述:
NUM_WORDS = { "zero": 0, "one": 1, "two": 2, "three": 3, "four": 4, "five": 5, "six": 6, "seven": 7, "eight": 8, "nine": 9, "ten": 10, "eleven": 11, "twelve": 12, "thirteen": 13, "fourteen": 14, "fifteen": 15, "sixteen": 16, "seventeen": 17, "eighteen": 18, "nineteen": 19, "twenty": 20, "thirty": 30, "forty": 40, "fifty": 50, "sixty": 60, "seventy": 70, "eighty": 80, "ninety": 90 } - 编写通用转换函数,按照英文两位数的组合规则(整十数加个位数累加)计算最终数值:
def words_to_number(word_str: str) -> int: total = 0 # 统一转小写后按空格拆分单个词 for word in word_str.strip().lower().split(): if word not in NUM_WORDS: raise ValueError(f"暂不支持识别的数词:{word}") total += NUM_WORDS[word] return total - 针对场景做验证:
# 已拆分完成的表达式列表 expr_list = ["twenty two", "plus", "three"] # 转换首元素、尾元素为对应数值 first_num = words_to_number(expr_list[0]) last_num = words_to_number(expr_list[-1]) # 运行结果:first_num=22,last_num=3,完全满足转换需求
方案特点:没有额外依赖,逻辑透明,后续如果需要支持更大范围的数词,只需要在映射字典中补充对应条目即可。
复杂场景使用成熟第三方库
如果需要支持更大范围的数词(比如带hundred、thousand、million的长数词表述),可以直接用经过大量场景验证的转换库,不需要自己维护复杂的转换规则:
- 以常用的
word2number库为例,转换逻辑非常简洁,直接传入数词字符串即可得到对应数值:from word2number import w2n first_num = w2n.word_to_num("twenty two") # 结果为22 last_num = w2n.word_to_num("three") # 结果为3 - 这种方式自动适配带连字符的数词(比如
twenty-two)、多位数长表述的转换,减少自定义规则的遗漏问题。
通用注意事项
- 转换前统一将输入字符串转为小写,避免大小写差异导致的映射匹配失败
- 提前做字符串预处理,把连字符、多余的空格替换成标准空格,保证拆分逻辑正确
- 遇到不支持的数词时做好异常捕获,避免程序直接崩溃
内容的提问来源于stack exchange,提问作者gromozeqa
相关产品推荐
相关产品推荐

