Подтвердить что ты не робот

Как удалить строчные буквы в текстовом поле?

Я пытаюсь удалить строчные буквы на TextBox..

Например, короткий альфа-код, представляющий страховку (например, "BCBS" для "Blue Cross Blue Shield" ):

txtDesc.text = "Blue Cross Blue Shield";

string Code = //This must be BCBS.. 

Возможно ли это? Пожалуйста, помогите мне. Спасибо!

4b9b3361

Ответ 1

Ну, вы можете использовать регулярное выражение, чтобы удалить все, что не было капиталом A-Z:

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);
    }
}

Обратите внимание, что это также приведет к удалению любых символов, отличных от ASCII. Альтернативным регулярным выражением было бы следующее:

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

... Я считаю, что это должно охватывать буквы верхнего регистра всех культур.

Ответ 2

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

Ответ 3

Вот мой вариант:

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"

Мне обычно нравятся регулярные выражения, но я не знаю, как выбрать в них "только верхний регистр" без [A-Z], который сильно нарушит символы за пределами английского алфавита (даже другие латинские символы!: -/)

Счастливое кодирование.


Но см. ответ г-на Скита для регулярного выражения; -)

Ответ 4

Вы можете попробовать использовать Заменить строчные буквы со звездочкой, но изменить '*' на '' (пробел)

Таким образом, код будет выглядеть примерно так:

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);

Ответ 5

Я сопоставляю значение с аббревиатурой в словаре, например:

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

Но если вы все еще хотите использовать функциональность, которую вы упомянули, используйте linq:

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

Ответ 6

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

Ответ 7

Без регулярного выражения:

string input = "Blue Cross Blue Shield";
string output = new string(input.Where(Char.IsUpper).ToArray());
Response.Write(output);

Ответ 8

string caps = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

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

Ответ 9

Вместо того, чтобы сопоставлять все капиталы, я думаю, что для спецификации потребуется сопоставить первый символ со всеми словами. Это позволило бы вносить необоснованный вклад, но в долгосрочной перспективе быть надежным. По этой причине я предлагаю использовать следующий код. Он использует агрегат для каждого Match из объекта Regex и добавляет значение к строковому объекту с именем output.

string input = "Blue Cross BLUE shield 12356";
Regex regex = new Regex("\\b\\w");
string output = regex.Matches(input).Cast<Match>().Aggregate("", (current, match) => current + match.Value);
Console.WriteLine(output.ToUpper()); // outputs BCBS1

Ответ 10

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

Ответ 11

Это не идеально, но должно работать (и проходит ваш тест BCBS):

private static string AlphaCode(String Input)
{
    List<String> capLetter = new List<String>();
    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<String> capLetter = new List<String>();
    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());
}