You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python使用num2words做序数转换时报decimal.ConversionSyntax错误如何解决

问题原因
  • 正则表达式语法错误:[st|nd|rd|th]是字符匹配规则,只能匹配单个字符,无法匹配完整的序数后缀,应该替换为捕获组(st|nd|rd|th);同时原正则的第一个捕获组包含了数字后的空格,提取到的内容不是纯数字,会导致转换失败。
  • re.sub传入lambda的参数x是正则匹配的Match对象,不是匹配到的文本内容,直接调用str(x)得到的是Match对象的内存描述字符串,无法被num2words解析,才会抛出十进制转换异常。
  • 原代码未提前导入re库,运行时也会触发模块不存在的报错。
修正方案

完整可运行代码如下:

import re
import num2words

sentence = "ordinal numbers are like as 42 nd, 67 th, and 5 th and plain numbers such as 1, 2, 3."
# 正则调整:捕获纯数字,匹配后面带空格加序数后缀的结构
sentence = re.sub(r"(\d+) (st|nd|rd|th)", lambda x: num2words.num2words(int(x.group(1)), ordinal=True), sentence)
print(sentence)
运行输出
ordinal numbers are like as forty-second, sixty-seventh, and fifth and plain numbers such as 1, 2, 3.

注:你示例中写的fourty-second是拼写错误,num2words标准输出为forty-second,属于英文拼写的常规规则。

内容的提问来源于stack exchange,提问作者akp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 20:15:05