给定以下示例字符串:
PP12111 LOREM IPSUM TM ENCORE
LOREM PP12111 IPSUM TM ENCORE
LOREM IPSUM ENCORE TM PP12111
LOREM PP12111 PP12111 TM ENCORE
什么是 .NET RegEx 来设置标题大小写,然后将任何包含数字和字母的字符串转换为大写(见下面的注释):
PP12111 Lorem Ipsum TM Encore
Lorem PP12111 Ipsum TM Encore
Lorem Ipsum Encore TM PP12111
Lorem PP12111 PP12111 TM Encore
Alternativley,我可以从所有设置为 Title Case 开始,所以只有包含数字和字母的字符串需要设置为大写:
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] );
}
}