mayusculas - trim c#
¿Cómo eliminar minúsculas en un cuadro de texto? (11)
Estoy tratando de eliminar las letras minúsculas en un TextBox
...
Por ejemplo, el código alfa corto que representa el seguro (por ejemplo, ''BCBS'' para ''Blue Cross Blue Shield''):
txtDesc.text = "Blue Cross Blue Shield";
string Code = //This must be BCBS..
¿Es posible? Por favor, ayúdame. ¡Gracias!
Aquí está mi variante:
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"
Normalmente me gusta usar expresiones regulares, pero no sé cómo seleccionar "solo mayúsculas" en ellas sin [AZ]
que no afectará a los caracteres que están fuera del alfabeto inglés (¡incluso a otros caracteres latinos!: - /)
Feliz codificacion
Pero vea la respuesta del Sr. Skeet para la forma de expresiones regulares ;-)
Asignaría el valor a su abreviatura en un diccionario como:
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
Pero si aún quieres la funcionalidad que mencionas usa linq:
string newString = new string(txtDesc.Text.Where(c => char.IsUpper(c).ToArray());
Bueno, podrías usar una expresión regular para eliminar todo lo que no era AZ de capital:
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);
}
}
Tenga en cuenta que esto también eliminaría cualquier carácter no ASCII. Una expresión regular sería:
Regex regex = new Regex(@"[^/p{Lu}]");
... Creo que debería abarcar mayúsculas de todas las culturas.
En lugar de hacer coincidir todas las mayúsculas, creo que la especificación requeriría hacer coincidir el primer carácter de todas las palabras. Esto permitiría una entrada incoherente pero aún así sería confiable a largo plazo. Por esta razón, sugiero usar el siguiente código. Utiliza un agregado en cada Match
del objeto Regex
y agrega el valor a un objeto de cadena llamado 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
Esto no es perfecto pero debería funcionar (y pasa la prueba de 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());
}
Y esta versión manejará escenarios de entrada extraños (esto asegura que la primera letra de cada palabra esté en mayúscula).
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());
}
Puede intentar usar la implementación '' Reemplazar minúsculas con estrella '', pero cambiar ''*'' a '''' (en blanco)
Entonces el código se vería así:
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);
Sin Regex:
string input = "Blue Cross Blue Shield";
string output = new string(input.Where(Char.IsUpper).ToArray());
Response.Write(output);
string Code = new String(txtDesc.text.Where(c => IsUpper(c)).ToArray());
string Code = Regex.Replace(txtDesc.text, "[a-z]", "");
string Code = Regex.Replace(txtDesc.text, "[a-z]", "");
string caps = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string.Join("",
"Blue Cross Blue Shield".Select(c => caps.IndexOf(c) > -1 ? c.ToString() : "")
.ToArray());