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
相关产品推荐
相关产品推荐

