Как удалить строчные буквы в текстовом поле?
Я пытаюсь удалить строчные буквы на TextBox
..
Например, короткий альфа-код, представляющий страховку (например, "BCBS" для "Blue Cross Blue Shield" ):
txtDesc.text = "Blue Cross Blue Shield";
string Code = //This must be BCBS..
Возможно ли это? Пожалуйста, помогите мне. Спасибо!
Ответы
Ответ 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());
}