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())
첫 번째 경우의 규칙은 무엇입니까? 항상 첫 번째, 두 번째, 마지막 숯? 그리고 이러한 경우를 구별하기위한 규칙은 무엇입니까? – okrumnow
영어로 말하면서 딱딱한 소리가 나는 것 : NASA 나 Marvel의 SHIELD라고 발음하는 약어입니다. 그것들은 각 단어의 첫 글자를 취하고 그 단어 (CIA 또는 NSA와 같은)를 발음하지 않으면 한 단어를 짧게하면 (예 : 첫 번째 예 또는 EXT. 외장) 약어가됩니다. –
@okrumnow 특정 규칙이 없으므로, 그냥 바람직한 결과의 예로서 사용했습니다. – amcdnl