Semplice stringa get (ignorare i numeri alla fine) in C #
-
18-09-2019 - |
Domanda
Immagino regex è eccessivo anche che mi ci vuole un po 'di tempo per scrivere del codice (Credo che dovrei imparare ora che so che alcune espressioni regolari).
Che cosa è il modo più semplice per separare la stringa in una stringa alfanumerica? Sarà sempre LLLLDDDDD. Io voglio solo le lettere (l's), tipicamente i suoi solo 1 o 2 lettere.
Soluzione
TrimEnd :
string result = input.TrimEnd(new char[]{'0','1','2','3','4','5','6','7','8','9'});
// I'm sure using LINQ and Range can simplify that.
// also note that a string like "abc123def456" would result in "abc123def"
Ma un RegEx è anche semplice:
string result = Regex.Match(input,@"^[^\d]+").Value;
Altri suggerimenti
Io preferisco risposta regex di Michael Stum, ma ecco un approccio LINQ così:
string input = "ABCD1234";
string result = new string(input.TakeWhile(c => Char.IsLetter(c)).ToArray());
È possibile usare un'espressione regolare che corrisponde alle cifre per rimuoverli:
input = Regex.Replace(input, "\d+$", String.Empty);
Il vecchio ciclo stile non è male, dovrebbe in realtà essere la soluzione più veloce:
int len = input.Length;
while (input[len-1] >= '0' && input[len-1] <= '9') len--;
input = input.Substring(0, len);
Hanno esso - di notare le buone soluzioni utilizzano l'operatore not di impiegare la vostra descrizione del problema: "non numeri" se tu avessi i numeri nella parte anteriore sembra dalle mie limitate guadagni che si deve avere quello che viene chiamato gruppi di cattura per superare qualunque cosa sia sul front-end della stringa. Il paradigma di progettazione che uso ora non è carattere di delimitazione, seguito dal carattere delimitatore, seguita da una parentesi aperta.
che si traduce in bisogno di un carattere di delimitazione che non è nel set di risultati, che per una cosa può essere ben definito valori ASCII per i dati-delimitersl ad esempio 0x0019 / 0x0018 e così via.