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

im *_*ess 18 .net c# string uppercase

我正试图删除一个小写字母TextBox..

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

txtDesc.text = "Blue Cross Blue Shield";

string Code = //This must be BCBS.. 
Run Code Online (Sandbox Code Playgroud)

可能吗?请帮我.谢谢!

Jon*_*eet 38

那么你可以使用正则表达式删除所有不是资本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("[^A-Z]");
        string output = regex.Replace(input, "");
        Console.WriteLine(output);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Regex regex = new Regex(@"[^\p{Lu}]");
Run Code Online (Sandbox Code Playgroud)

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

  • 也许`新的正则表达式("...",RegexOptions.Compiled)`? (2认同)
  • @abatishev - 编译需要额外的时间,你不希望在使用过一次的本地正则表达式上. (2认同)

And*_*per 20

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


小智 12

这是我的变体:

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"
Run Code Online (Sandbox Code Playgroud)

我通常喜欢使用正则表达式,但我不知道如何在其中选择"仅大写"而没有[A-Z]它会在英语字母表外的字符上严重破坏(甚至其他拉丁字符!: - /)

快乐的编码.


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


abr*_*pin 7

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

所以代码看起来像这样:

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);
Run Code Online (Sandbox Code Playgroud)

  • 那需要将替换的结果分配给某些东西;-) (2认同)

Alm*_*und 7

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

Dictionary<string, string> valueMap = new Dictionary<string, string>();
valueMap.Add("Blue Cross Blue Shield", "BCBS");

string Code = "";
if(valueMap.ContainsKey(txtDesc.Text))
  Code = valueMap[txtDesc.Text];
else
  // Handle
Run Code Online (Sandbox Code Playgroud)

但如果你仍然想要你提到的功能使用linq:

string newString = new string(txtDesc.Text.Where(c => char.IsUpper(c).ToArray());
Run Code Online (Sandbox Code Playgroud)


Chr*_*ker 7

string Code = Regex.Replace(txtDesc.text, "[a-z]", "");
Run Code Online (Sandbox Code Playgroud)


Bar*_*aye 6

没有正则表达式:

string input = "Blue Cross Blue Shield";
string output = new string(input.Where(Char.IsUpper).ToArray());
Response.Write(output);
Run Code Online (Sandbox Code Playgroud)


man*_*nji 5

string caps = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

string.Join("",
   "Blue Cross Blue Shield".Select(c => caps.IndexOf(c) > -1 ? c.ToString() : "")
                           .ToArray());
Run Code Online (Sandbox Code Playgroud)