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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top