2012-05-05 39 views
5

Nel mio progetto corrente devo lavorare molto con la sottostringa e mi chiedo se c'è un modo più semplice per ottenere i numeri da una stringa.Ottenere numeri specifici dalla stringa

Esempio: ho una stringa come questa: 12 testo testo testo 7

voglio essere a disposizione per uscire primo numero impostato o secondo numero impostato. Quindi se chiedo il numero impostato 1 riceverò 12 in cambio e se chiedo il numero impostato 2 riceverò 7 in cambio.

Grazie!

risposta

7

Questo creerà un array di interi dalla stringa:

using System.Linq; 
using System.Text.RegularExpressions; 

class Program { 
    static void Main() { 
     string text = "12 text text 7 text"; 
     int[] numbers = (from Match m in Regex.Matches(text, @"\d+") select int.Parse(m.Value)).ToArray(); 
    } 
} 
+0

Grazie, proprio quello di cui avevo bisogno! : D Btw scusa per il voto negativo, non sapevo che non potevo votare perché sono appena registrato. –

+0

@TobiasLindberg: contento che abbia aiutato, in tal caso è possibile annullare il voto negativo meybe :)? –

+0

Mi dispiace che fosse solo una faccenda del client, in realtà non ti ha votato. Grazie ancora! –

1

Sembra una buona corrispondenza per Regex.

L'espressione regolare di base è \d+ da abbinare su (una o più cifre).

È possibile scorrere la raccolta Matches restituita da Regex.Matches e analizzare a turno ciascuna partita restituita.

var matches = Regex.Matches(input, "\d+"); 

foreach(var match in matches) 
{ 
    myIntList.Add(int.Parse(match.Value)); 
} 
1

Prova ad usare le espressioni regolari, è possibile abbinare [0-9]+ che adattarsi a qualsiasi percorso di numeri all'interno della vostra stringa. Il codice C# per usare questa espressione regolare è più o meno la seguente:

Match match = Regex.Match(input, "[0-9]+", RegexOptions.IgnoreCase); 

// Here we check the Match instance. 
if (match.Success) 
{ 
    // here you get the first match 
    string value = match.Groups[1].Value; 
} 

Avrete ovviamente devono ancora analizzare le stringhe restituite.

0

È possibile utilizzare espressioni regolari:

Regex regex = new Regex(@"^[0-9]+$"); 
+0

Si presume che i primi 0 non siano consentiti. – Oded

0

è possibile dividere la stringa in parti utilizzando String.split, e poi il travese elencare con un foreach applicando int.TryParse, qualcosa del genere:

string test = "12 text text 7 text"; 
var numbers = new List<int>(); 
int i; 
foreach (string s in test.Split(' ')) 
{ 
    if (int.TryParse(s, out i)) numbers.Add(i); 
} 

Ora i numeri hanno l'elenco di valori validi

+0

ciao Odd, grazie per la cattura. Come menzionato nella prima frase, dovrebbe essere TryParse. L'ho corretto –

Problemi correlati