1

これは言語固有の質問ではありません。

すべて大文字の文字列があります。この文字列は別のソースから取得され、何らかの理由で常にすべて大文字になっています。

文字列をもう少し読みやすくするというタスクが与えられたので、単純な正規表現を使用して文の大文字と小文字を変換する方法を平手打ちすることにしました。

問題は、この文字列には多くの頭字語が使用されているため、影響を受けないようにしたいということです。国コード (US、CA、JP、FR など) や空港コード (LAX、LGA) など、場合によってはその他のコードも含まれます。

今、私は最初にデータベースか何かの頭字語のリスト、可能なすべての空港コード、国コード、およびETA、CODなどの一般的に使用される頭字語のリストが必要だと思います...

このデータベースを作成したら、問題の文字列にどのように適用できますか?? 「us」という言葉が「US」に、またはその逆に変更されるのを防ぐにはどうすればよいですか?? 基本的に知りたいのは、DB にあるものを取得して、必要なすべての変更を文字列に適用するにはどうすればよいかということです。

覚えておいてください、元の文字列はすべて大文字で取得されるため、区別する方法はありません.

どんなアイデアでも大歓迎です!!

ありがとう!!!

4

1 に答える 1

1

これに近いことは、 titleizeメソッドを提供するActiveSupport::Inflectorで行うことができます ( String.titleizeの作業を行います)。

最初に、イニシャライザで独自の語形変化を定義します。

# config/initializers/inflections.rb
ActiveSupport::Inflector.inflections do |inflect|
  inflect.acronym 'US'
end

アプリを再起動して変更を反映させます。titleizeこれで、「US」の扱い方がわかりました。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 に答える