是否有Ruby gem或库提供解析序数的方法?

时间:2012-11-02 19:55:14

标签: ruby gem

我正在寻找一种方法来解析Ruby中的序数(第一,第二,第三等)并将它们转换为整数。你知道有哪些图书馆这样做吗?

4 个答案:

答案 0 :(得分:4)

当我意识到chronic gem作为解析日期过程的一部分时,我在问这个问题时已经过了一半。安装gem之后,您可以非常轻松地将序号转换为整数:

irb(main):001:0> require 'chronic'
=> true
irb(main):002:0> Chronic::Numerizer.numerize("eighty-fifth").to_i
=> 85

修改:不幸的是,似乎chronic无法正确解析序数“second”:

irb(main):003:0> Chronic::Numerizer.numerize("twenty-second").to_i
=> 20

原因是chronic旨在解析日期和时间,而“second”可以是该上下文中的序数或时间单位。要解决此问题,您可以使用此行修补chronic的{​​{1}}类:

Numerizer

现在可行:

Chronic::Numerizer::ORDINALS.insert(1, ['second', '2'])

如果您实际上正在使用irb(main):005:0> Chronic::Numerizer.numerize("eighty-second").to_i => 82 用于其预期目的,您可能不希望使用其内部功能。在这种情况下,您可以将source codechronic复制到新类中,然后使用该类。不要忘记将Chronic::Numerizer添加到新类中的['second', '2']常量。

答案 1 :(得分:1)

如果Chronic不适合您的使用案例,那么有一个名为numerouno的宝石似乎是专门针对此的。

答案 2 :(得分:0)

我一直在使用名为deordinalize(https://rubygems.org/gems/deordinalize)的宝石,这似乎可以很好地完成这项工作 - 只需确保你在打电话之前保持低调;

>> require 'deordinalize'
>> 'Forty-Second'.downcase.deordinalize
=> 42

答案 3 :(得分:0)

正确解析序数" second": 你现在要使用这一行来修补Numerizer类

SINGLE_ORDINALS.insert(1, ['second', 2])