InvalidOperation:Lambda 函数中的 [<class 'decimal.ConversionSyntax'>] python
InvalidOperation: [<class 'decimal.ConversionSyntax'>] in Lambda function python
我有一个包含纯数字和序数的句子,我想将序数转换为诸如 2 nd 到 Second、56 th 到 Fifty sixth 之类的词。
我使用了 num2words 库,下面的代码完美运行。
import num2words
text = "ordinal numbers are like as 42 nd, 67 th, and 5 th and plain numbers such as 1, 2, 3."
numbers = re.findall('(\d+ )[st|nd|rd|th]', text)
numbers
for n in numbers:
ordinalAsString = num2words.num2words(n, ordinal=True)
print(ordinalAsString)
#forty-second
#sixty-seventh
#fifth
现在我想创建一个 lambda 函数,
sentence = "ordinal numbers are like as 42 nd, 67 th, and 5 th and plain numbers such as 1, 2, 3."
o/p sentence = "ordinal numbers are like as fourty-second, sixty-seventh, and fifth and plain numbers such as 1, 2, 3."
我是这样写函数的,
sentence = re.sub(r"(\d+ )[st|nd|rd|th]", lambda x: num2words.num2words(str(x), ordinal=True), sentence)
但这会引发错误,例如
InvalidOperation: [<class 'decimal.ConversionSyntax'>]
代码有什么问题?
有两个问题:
您的正则表达式未正确匹配后缀,仅匹配后缀的第一个字母。 [st|nd|rd|th]
正好匹配括号内的一个字符;重复项将被忽略,因此它等同于 [st|ndrh]
,其中 |
被视为要像每个字母一样匹配的字符。使用 r"(\d+ )(?:st|nd|rd|th)"
代替;非捕获组 (?:...)
中的 |
确实 用于分隔 4 种模式 st
、nd
、rd
, 和 th
.
传递给 re.sub
的可调用对象将 Match
对象作为其参数。您需要使用它的 group
方法来提取捕获的 sting。 lambda x: num2words.num2words(x.group(1), ordinal=True)
.
我有一个包含纯数字和序数的句子,我想将序数转换为诸如 2 nd 到 Second、56 th 到 Fifty sixth 之类的词。 我使用了 num2words 库,下面的代码完美运行。
import num2words
text = "ordinal numbers are like as 42 nd, 67 th, and 5 th and plain numbers such as 1, 2, 3."
numbers = re.findall('(\d+ )[st|nd|rd|th]', text)
numbers
for n in numbers:
ordinalAsString = num2words.num2words(n, ordinal=True)
print(ordinalAsString)
#forty-second
#sixty-seventh
#fifth
现在我想创建一个 lambda 函数,
sentence = "ordinal numbers are like as 42 nd, 67 th, and 5 th and plain numbers such as 1, 2, 3."
o/p sentence = "ordinal numbers are like as fourty-second, sixty-seventh, and fifth and plain numbers such as 1, 2, 3."
我是这样写函数的,
sentence = re.sub(r"(\d+ )[st|nd|rd|th]", lambda x: num2words.num2words(str(x), ordinal=True), sentence)
但这会引发错误,例如
InvalidOperation: [<class 'decimal.ConversionSyntax'>]
代码有什么问题?
有两个问题:
您的正则表达式未正确匹配后缀,仅匹配后缀的第一个字母。
[st|nd|rd|th]
正好匹配括号内的一个字符;重复项将被忽略,因此它等同于[st|ndrh]
,其中|
被视为要像每个字母一样匹配的字符。使用r"(\d+ )(?:st|nd|rd|th)"
代替;非捕获组(?:...)
中的|
确实 用于分隔 4 种模式st
、nd
、rd
, 和th
.传递给
re.sub
的可调用对象将Match
对象作为其参数。您需要使用它的group
方法来提取捕获的 sting。lambda x: num2words.num2words(x.group(1), ordinal=True)
.