주어진 다음의 샘플 문자열이있는 모든 단어를 제목 경우 다음 대문자를 설정합니다 :정규식 혼합 숫자와 문자
PP12111 LOREM IPSUM TM ENCORE
LOREM PP12111 IPSUM TM ENCORE
LOREM IPSUM ENCORE TM PP12111
LOREM PP12111 PP12111 TM ENCORE
닷넷 정규식 제목 케이스를 설정 한 다음 포함하는 모든 문자열을 변환하는 것입니다 무엇 나는 숫자를 포함하므로 단지 문자열이 제목 케이스로 설정 모든 것을 시작할 수
PP12111 Lorem Ipsum TM Encore
Lorem PP12111 Ipsum TM Encore
Lorem Ipsum Encore TM PP12111
Lorem PP12111 PP12111 TM Encore
Alternativley와 문자는 대문자로 설정해야합니다 : 대문자로 숫자와 문자 (아래 참고 참조)
Pp12111 Lorem Ipsum TM Encore
Lorem Pp12111 Ipsum TM Encore
Lorem Ipsum Encore TM Pp12111
Lorem Pp12111 Pp12111 TM Encore
참고 : TM이 변형 된 경우 (tm, Tm, tM) 전체 대문자 여야합니다. TM은 "lorem ipsum TM valor"또는 "lorem ipsum (TM) valor"일 수 있습니다.
다음은 작동하는 순수한 문자열 조작 방법입니다. RegEx 솔루션이 더 적합 할 수 있다고 생각합니까?
private static void Main(string[] args)
{
var phrases = new[]
{
"PP12111 LOREM IPSUM TM ENCORE", "LOREM PP12111 IPSUM TM ENCORE",
"LOREM IPSUM ENCORE TM PP12111", "LOREM PP12111 PP12111 TM ENCORE",
};
Test(phrases);
}
private static void Test(IList<string> phrases)
{
var ti = Thread.CurrentThread.CurrentCulture.TextInfo;
for(int i = 0; i < phrases.Count; i++)
{
string p = ti.ToTitleCase(phrases[i].ToLower());
string[] words = p.Split(' ');
for(int j = 0; j < words.Length; j++)
{
string word = words[j];
if(word.ToCharArray().Any(Char.IsNumber))
{
word = word.ToUpper();
}
words[j] = word.Replace(" Tm ", " TM ").Replace("(Tm)", "(TM)");
}
phrases[i] = string.Join(" ", words);
Console.WriteLine(phrases[i]);
}
}
정규식만으로는이 작업을 수행 할 수 없습니다. 대/소문자를 바꾸려면 콜백 함수가 필요합니다. 'Regex.Replace'의 [this overload] (http://msdn.microsoft.com/en-us/library/ht1sxswy.aspx)를보십시오. –
@ m.buettner - 링크를 제공해 주셔서 감사합니다. 나는 그것을 검토 할 것이고 잘하면 그것이 더 나은 이해를 줄 것이다. –