我正在寻找一种方法来解析Ruby中的序数(第一,第二,第三等)并将它们转换为整数.你知道有没有这样做的图书馆吗?
chronic当我意识到gem 将此作为解析日期过程的一部分时,我问了一半。安装 gem 后,您可以非常轻松地将序数转换为整数:
irb(main):001:0> require 'chronic'
=> true
irb(main):002:0> Chronic::Numerizer.numerize("eighty-fifth").to_i
=> 85
Run Code Online (Sandbox Code Playgroud)
编辑:不幸的是,似乎chronic没有正确解析序数“第二”:
irb(main):003:0> Chronic::Numerizer.numerize("twenty-second").to_i
=> 20
Run Code Online (Sandbox Code Playgroud)
这样做的原因是它chronic旨在解析日期和时间,并且“秒”可以是该上下文中的序数或时间单位。为了解决这个问题,你可以使用以下代码来猴子 patchchronic的类:Numerizer
Chronic::Numerizer::ORDINALS.insert(1, ['second', '2'])
Run Code Online (Sandbox Code Playgroud)
现在它可以工作了:
irb(main):005:0> Chronic::Numerizer.numerize("eighty-second").to_i
=> 82
Run Code Online (Sandbox Code Playgroud)
如果您确实将其用于chronic其预期目的,您可能不想破坏其内部结构。在这种情况下,您可以将源代码复制到Chronic::Numerizer一个新类中并使用该类。不要忘记添加['second', '2']到ORDINALS新类中的常量。