如何删除文本框中的小写?

我正在尝试删除TextBox上的小写字母..

例如,代表保险的短alpha代码(例如,’Blue Cross Blue Shield’的’BCBS’):

 txtDesc.text = "Blue Cross Blue Shield"; string Code = //This must be BCBS.. 

可能吗? 请帮我。 谢谢!

那么你可以使用正则表达式删除所有不是资本AZ的东西:

 using System; using System.Text.RegularExpressions; class Program { static void Main( string[] args ) { string input = "Blue Cross Blue Shield 12356"; Regex regex = new Regex("[^AZ]"); string output = regex.Replace(input, ""); Console.WriteLine(output); } } 

请注意,这将删除任何非ASCII字符。 另一种正则表达式是:

 Regex regex = new Regex(@"[^\p{Lu}]"); 

……我认为应该涵盖所有文化的大写字母。

 string Code = new String(txtDesc.text.Where(c => IsUpper(c)).ToArray()); 

这是我的变体:

 var input = "Blue Cross Blue Shield 12356"; var sb = new StringBuilder(); foreach (var ch in input) { if (char.IsUpper(ch)) { // only keep uppercase sb.Append(ch); } } sb.ToString(); // "BCBS" 

我通常喜欢使用正则表达式,但我不知道如何在没有[AZ]情况下选择“仅大写”,这会在英文字母之外的字符上严重破坏(甚至其他拉丁字符!: – /)

快乐的编码。


但请看Skeet先生对正则表达方式的回答;-)

 string Code = Regex.Replace(txtDesc.text, "[az]", ""); 

我会将值映射到字典中的缩写,例如:

 Dictionary valueMap = new Dictionary(); valueMap.Add("Blue Cross Blue Shield", "BCBS"); string Code = ""; if(valueMap.ContainsKey(txtDesc.Text)) Code = valueMap[txtDesc.Text]; else // Handle 

但是如果你仍然想要你提到的function使用linq:

 string newString = new string(txtDesc.Text.Where(c => char.IsUpper(c).ToArray()); 

您可以尝试使用’ 将小写字符替换为星号 ‘实现,但将’*’更改为”(空白)

所以代码看起来像这样:

 txtDesc.Text = "Blue Cross Blue Shield"; string TargetString = txt.Desc.Text; string MainString = TargetString; for (int i = 0; i < TargetString.Length; i++) { if (char.IsLower(TargetString[i])) { TargetString = TargetString.Replace( TargetString[ i ].ToString(), string.Empty ); } } Console.WriteLine("The string {0} has converted to {1}", MainString, TargetString); 

没有正则表达式:

 string input = "Blue Cross Blue Shield"; string output = new string(input.Where(Char.IsUpper).ToArray()); Response.Write(output); 
 string caps = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; string.Join("", "Blue Cross Blue Shield".Select(c => caps.IndexOf(c) > -1 ? c.ToString() : "") .ToArray()); 

我认为规范要求匹配所有单词中的第一个字符,而不是匹配所有大写字母。 这将允许不一致的输入,但从长远来看仍然是可靠的。 出于这个原因,我建议使用以下代码。 它在Regex对象的每个Match上使用聚合,并将值附加到名为output的字符串对象。

 string input = "Blue Cross BLUE shield 12356"; Regex regex = new Regex("\\b\\w"); string output = regex.Matches(input).Cast().Aggregate("", (current, match) => current + match.Value); Console.WriteLine(output.ToUpper()); // outputs BCBS1 
 string Code = Regex.Replace(txtDesc.text, "[az]", ""); 

这不完美,但应该有效(并通过您的BCBS测试):

 private static string AlphaCode(String Input) { List capLetter = new List(); foreach (Char c in Input) { if (char.IsLetter(c)) { String letter = c.ToString(); if (letter == letter.ToUpper()) { capLetter.Add(letter); } } } return String.Join(String.Empty, capLetter.ToArray()); } 

此版本将处理奇怪的输入方案(这可确保每个单词的首字母大写)。

 private static string AlphaCode(String Input) { String capCase = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(Input.ToString().ToLower()); List capLetter = new List(); foreach (Char c in capCase) { if (char.IsLetter(c)) { String letter = c.ToString(); if (letter == letter.ToUpper()) { capLetter.Add(letter); } } } return String.Join(String.Empty, capLetter.ToArray()); }