對於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方法返回MatchCollection,這基本上是一個ICollection的如此使用LINQ表達式,我們稱之爲OfType()到MatchCollection轉換成一個IEnumerable。
Regex.Matches(text, pattern).OfType<Match>()
然後我們選擇比賽才值(我們不需要其他的正則表達式匹配的元數據),並將其轉換爲大寫。
Select(x => x.Value.ToUpper())
第一種情況的規則是什麼?總是第一,第二,最後一個字符?區分這些情況的規則是什麼? – okrumnow
只是一些英語nitpicking:這是一個縮寫,如果它的發音(美國宇航局,或漫威的盾牌)。如果您從每個單詞中取出第一個字母但不發音(如CIA或NSA),並縮寫爲一個單詞(如第一個例子或外部的EXT),則它們是初始的。 –
@okrumnow我沒有任何具體的規則,我只是用它作爲一個理想的結果的例子。 – amcdnl