1

这不是一个特定于语言的问题。

我有一个全部大写的字符串。这个字符串来自一个单独的来源,并且由于某种原因总是全部大写。

我的任务是让字符串对读者更友好,所以我决定使用简单的正则表达式在它上面添加一个句子大小写转换器方法。

问题是,这个字符串中使用了很多首字母缩略词,我想让它们不受影响。国家代码(US、CA、JP、FR 等)或机场代码(LAX、LGA),有时还有许多其他代码。

现在我猜我首先需要一个数据库或其他东西中的首字母缩写词列表,所有可能的机场代码、国家代码和常用首字母缩写词列表,如 ETA、COD 等......

一旦我创建了这个数据库,我怎样才能将它应用到有问题的字符串?我怎样才能防止“我们”这个词被改为美国,反之亦然?我基本上想知道的是,我如何获取数据库中的内容并将所有必要的更改应用于字符串?

请记住,我得到的原始字符串全部大写,所以没有办法区分。

任何想法将不胜感激!

谢谢!!!

4

1 回答 1

1

可以使用ActiveSupport::Inflector完成类似的操作,它提供了titleize方法(它为String.titleize工作)。

首先,在初始化程序中定义您自己的变形。

# 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."
于 2014-03-25T15:46:25.860 回答