Phoenix => PHXについては、文字列を既知の略語の辞書と照合する必要があると思います。複数単語/ラクテルケースのサポートに関しては、正規表現はあなたの友人です!
var text = "A Big copy DayEnergyFree good"; // abbreviation should be "ABCDEFG"
var pattern = @"((?<=^|\s)(\w{1})|([A-Z]))";
string.Join(string.Empty, Regex.Matches(text, pattern).OfType<Match>().Select(x => x.Value.ToUpper()))
ここで何が起きているのか、正規表現パターンから始めて、部分文字列を一致させるためのいくつかのケースについて説明します。
// must be directly after the beginning of the string or line "^" or a whitespace character "\s"
(?<=^|\s)
// match just one letter that is part of a word
(\w{1})
// if the previous requirements are not met
|
// match any upper-case letter
([A-Z])
Regex.Matches方法は、基本的にのでLINQ式を使用することいるICollectionあるMatchCollectionを返し、我々は、OfType()を呼び出してIEnumerableにMatchCollectionを変換します。
Regex.Matches(text, pattern).OfType<Match>()
はその後、我々は試合の値のみを選択します(私たちは、他の正規表現マッチングのメタデータを必要としない)と大文字に変換します。
Select(x => x.Value.ToUpper())
最初のケースのルールは何ですか?常に最初、2番目、最後の文字ですか?これらのケースを区別するためのルールは何ですか? – okrumnow
英語のニックピッキング:NASA、MarvelのSHIELDの発音が頭字語です。それぞれの単語の最初の文字を取りますが、それを発音しない(CIAやNSAなど)場合は短縮形で、省略形の場合は省略形です(最初の例や外部のEXTなど)。 –
@okrumnow特定の規則はありません。私はそれを望ましい結果の一例として使用していました。 – amcdnl