Usando espressioni regolari per estrarre più numeri dalle stringhe

Ho una stringa con due o più numeri. Ecco alcuni esempi:

"(1920x1080)" " 1920 by 1080" "16 : 9" 

Come posso estrarre numeri separati come “1920” e “1080” da esso, assumendo che saranno semplicemente separati da uno o più caratteri non numerici?

L’espressione regolare di base sarebbe:

 [0-9]+ 

Dovrai utilizzare la libreria per esaminare tutte le corrispondenze e ottenere i loro valori.

 var matches = Regex.Matches(myString, "[0-9]+"); foreach(var march in matches) { // match.Value will contain one of the matches } 

Puoi ottenere la stringa seguendo

 MatchCollection v = Regex.Matches(input, "[0-9]+"); foreach (Match s in v) { // output is s.Value } 
 (\d+)\D+(\d+) 

Successivamente, personalizza questa espressione regolare in modo che corrisponda al sapore della lingua che utilizzerai.

Puoi usare

 string[] input = {"(1920x1080)"," 1920 by 1080","16 : 9"}; foreach (var item in input) { var numbers = Regex.Split(item, @"\D+").Where(s => s != String.Empty).ToArray(); Console.WriteLine("{0},{1}", numbers[0], numbers[1]); } 

PRODUZIONE:

 1920,1080 1920,1080 16,9 

C’è ancora un problema però, tutte le risposte sopra considerano i numeri validi 12i o a2 quando non dovrebbero.

Quanto segue potrebbe risolvere questo problema

 var matches = Regex.Matches(input, @"(?:^|\s)\d+(?:\s|$)"); 

Ma questa soluzione aggiunge un altro problema 🙂 Questo catturerà gli spazi attorno all’intero. Per risolvere questo abbiamo bisogno di catturare il valore del numero intero in un gruppo:

 MatchCollection matches = Regex.Matches(_originalText, @"(?:^|\s)(\d+)(?:\s|$)"); HashSet uniqueNumbers = new HashSet(); foreach (Match m in matches) { uniqueNumbers.Add(m.Groups[1].Value); }