我正在寻找一种方法来解析Ruby中的序数(第一,第二,第三等)并将它们转换为整数。你知道有哪些图书馆这样做吗?
答案 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 code从chronic
复制到新类中,然后使用该类。不要忘记将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])