这不是特定于语言的问题。
我在ALL CAPS中有一个字符串。这个字符串来自一个单独的来源,由于某种原因总是全部大写。
我已经被赋予了使字符串更易于读者阅读的任务,因此我决定使用简单的正则表达式对其进行一个句子转换器方法。
问题是,这个字符串中使用了很多首字母缩略词,我想让它们不受影响。像国家代码(美国,加拿大,日本,法国等),或机场代码(LAX,LGA),有时还有许多其他代码。
现在我猜我首先需要一个数据库中的首字母缩略词列表,包括所有可能的机场代码,国家代码和常用的首字母缩略词列表,如ETA,COD等......
创建此数据库后,如何将其应用于相关字符串?如何防止“我们”改为美国,反之亦然?我基本上想知道的是,如何获取数据库中的内容并对字符串应用所有必要的更改?
请记住,我在ALL CAPS中获得原始字符串,因此无法区分。
任何想法都将不胜感激!!
感谢!!!
答案 0 :(得分:1)
可以使用ActiveSupport::Inflector来完成与此相近的事情,titleize提供String.titleize方法(为inflections工作)。
首先,在初始化程序中定义您自己的{{3}}。
# config/initializers/inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
inflect.acronym 'US'
end
重新启动您的应用以获取更改。现在titleize
知道如何处理“美国”。启动Rails控制台以查看它:
> "us".titleize
=> "US"
接下来,查看titleize
的源代码。理解之后,在初始化程序中重新打开Inflector类,并定义自己的方法,不要将每个单词的第一个字母大写。称之为漂亮的东西,比如decapitalize
。
module ActiveSupport::Inflector
def decapitalize(word)
humanize(underscore(word)) # you may enhance this a bit
end
end
class String
def decapitalize
ActiveSupport::Inflector.decapitalize(self)
end
end
您可能需要调整代码,但我认为它很接近。
以下是此解决方案无法处理的一些句子:
> "US STATES VISITED BY US".titleize
=> "US States Visited By US"
> "COLUMBIA (CO) EXPORTS ARE PROCESSED BY ACME BUILDING CO.".decapitalize
=> "Columbia (CO) exports are processed by acme building CO."