给定以下示例字符串:
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 EncoreAlternativley,我可以从设置为标题大小写的所有内容开始,因此只需要将包含数字和字母的字符串设置为大写:
Pp12111 Lorem Ipsum TM Encore
Lorem Pp12111 Ipsum TM Encore
Lorem Ipsum Encore TM Pp12111
Lorem Pp12111 Pp12111 TM Encore备注:如果存在TM的任何变体(tm,Tm,tM),则它应该是完整的大写。其中商标可以是"lorem ipsum商标英勇“或"lorem ipsum (商标)勇敢”。
下面是一种有效的纯字符串操作方法;我认为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] );
}
}发布于 2012-12-04 16:53:05
您可以这样使用这个正则表达式:
MatchEvaluator evaluator = m => ti.ToTitleCase(m.Value.ToLower());
string result = Regex.Replace(input, @"\b(?!TM\b)[A-Z']+\b", evaluator,
RegexOptions.IgnoreCase);\b是一种话语边界,它是一种自愿性、中性性、中性性、再性、再性等。
pos(?!suffix)匹配位置而不是后缀。
\b(?!TM\b)的准准性
[A-Z]+
合并:单词边界,而不是在"TM“前面加上字母A到Z和单词边界的单词。
更新#1
上套管"tm","Tm","tM":
我不知道所有没有大写的东西是否都是大写的。在这种情况下,最简单的解决方案是大写输入:input.ToUpper()。否则,执行第二个regex替换:
string result = Regex.Replace(result, @"\btm\b", "TM", RegexOptions.IgnoreCase);更新#2
如果要大写几个单词,只需使用另一个匹配计算器:
MatchEvaluator toUpperCase = m => m.Value.ToUpper();
string result = Regex.Replace(result, @"\b(tm|xxx|yyy)\b", toUpperCase,
RegexOptions.IgnoreCase);tm|xxx|yyy指定要大写的单词("tm“、"xxx”或"yyy")。
发布于 2012-12-04 16:29:31
这里有一个先前询问过的密切匹配,供您查看:Regular Expression Uppercase Replacement in C#。在这里,正则表达式是不够的,您必须编写一个MatchEvaluator函数才能将所有内容都变成大写。
编辑:见“注意:如果存在任何TM的变体( TM,Tm,tM),则它应该是完整的大写。如果TM可以是"lorem ipsum TM valor”或"lorem ipsum (TM) valor“。”让我觉得你不应该再考虑判决了。那前男友呢。oatm_eal,眩晕tm_en等。
是的,您可能可以编写一个正则表达式来查找所有的情况,或者编写一个考虑到您的逻辑的好的、彻底的匹配评估器。但是,在描述这个问题时,我认为您不熟悉正则表达式。因此,我很难认为这是一个很好的答案,并将是一个“特技”解决方案,而不是任何应该投入生产。
发布于 2012-12-04 16:18:20
首先: LowerCase所有的东西。
第二,把句子分成几个字。
每一个词:
检查一下,是否只有两个字母或字母和数字([a-z]{2}|[a-z0-9]{2,})
匹配-> UpperCase it。
不匹配-> TitleCase它.
https://stackoverflow.com/questions/13707046
复制相似问题