2010-03-15 23 views
5

Ho una stringa codificata di cui vorrei recuperare un valore. Mi rendo conto che posso eseguire alcune manipolazioni delle stringhe (IndexOf, LastIndexOf, ecc.) Per estrarre lo 12_35_55_219 dalla stringa sottostante, ma mi chiedevo se esistesse un modo più semplice per farlo.Recupera stringa da mezzo di una stringa

"AddedProject[12_35_55_219]0" 

risposta

6

Se si può essere sicuri del formato della stringa, quindi diverse possibilità:

Il mio preferito è quello di creare un semplice tokenizzatore:

string[] arrParts = yourString.Split("[]".ToCharArray());

Poiché non v'è un formato regolare per la stringa, arrPart avrà tre voci e la parte che ti interessa sarebbe arrParts[1].

Se il formato della stringa varia, sarà necessario utilizzare altre tecniche.

+1

+1 per non suggerire le espressioni regolari. – Brian

+1

... altrimenti avrei due problemi, giusto;) – kmontgom

+1

@Brian: Perché temi le espressioni regolari? – Guffa

4

Dipende da quanto può variare la stringa. È possibile ad esempio usare un'espressione regolare:

string input = "AddedProject[12_35_55_219]0"; 
string part = Regex.Match(input, @"\[[\d_]+\]").Captures[0].Value; 
1

Esistono due metodi che si possono trovare utili, c'è IndexOf e LastIndexOf con le parentesi quadre come i parametri. Con un po 'di ricerca, dovresti essere in grado di estrarre il numero del progetto.

5

Quindi, in sintesi, se si dispone di un modello che è possibile applicare alla stringa, è più semplice utilizzare espressioni regolari, come nell'esempio di Guffa.

D'altra parte ci sono sempre diversi token per definire l'inizio e la fine della stringa, quindi è necessario utilizzare la combinazione IndexOf e LastIndexOf e passare i token come parametro, rendendo l'esempio da Fredrik un po 'più generico:

string GetMiddleString(string input, string firsttoken, string lasttoken) 
{ 
    int pos1 = input.IndexOf(firsttoken) + 1; 
    int pos2 = input.IndexOf(lasttoken); 
    string result = input.Substring(pos1 , pos2 - pos1); 
    return result 
} 

E questo presuppone che i token avvengano solo una volta nella stringa.

0

Ecco un miglioramento dal GetMiddleString di Wagner Silveira

string GetMiddleString(string input, string firsttoken, string lasttoken) 
    { 
     int pos1 = input.ToLower().IndexOf(firsttoken.ToLower()) + firsttoken.Length; 
     int pos2 = input.ToLower().IndexOf(lasttoken.ToLower());    
     return input.Substring(pos1 , pos2 - pos1); 
    } 

Ed ecco come lo si utilizza

string data = "AddedProject[12_35_55_219]0"; 
string[] split = data.Split("[]".ToCharArray()); 
rtbHelp.Text += GetMiddleString(data, split[0], split[2]).Trim("[]".ToCharArray());//print it to my C# winForm RichTextBox Help