2012-05-05 22 views
5

En mi proyecto actual, tengo que trabajar mucho con la subcadena y me pregunto si existe una manera más fácil de sacar números de una cadena.Obtenga números específicos de la cadena

Ejemplo: Tengo una cadena como esta: 12 texto texto texto 7

Quiero estar disponible para salir primer número configurado o configurado segundo número. Así que si solicito el número de serie 1 recibiré 12 a cambio y si solicito el número de serie 2 obtendré 7 a cambio.

Gracias!

Respuesta

7

Esto creará una matriz de enteros de la cadena:

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

¡Gracias, justo lo que necesitaba! : D Lo siento por el voto negativo, no sabía que no podía votar porque estoy recién inscripto. –

+0

@TobiasLindberg: me alegro de que haya ayudado, en ese caso, puede deshacer el voto negativo meybe :)? –

+0

Lo siento, fue solo una cosa del lado del cliente, en realidad no te votó. ¡Gracias de nuevo! –

1

Parece una buena combinación para Regex.

La expresión regular básica sería \d+ para que coincida con (uno o más dígitos).

Debería iterar a través de la colección Matches devuelta desde Regex.Matches y analizar cada coincidencia devuelta por turno.

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

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

Trate de usar expresiones regulares, puede hacer coincidir [0-9]+ que coincidirá con cualquier racha de números dentro de su cadena. El código C# para usar esta expresión regular es aproximadamente el siguiente:

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; 
} 

Usted, por supuesto todavía tiene que analizar las cadenas devueltas.

0

Se puede usar expresiones regulares:

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

Está asumiendo que los '0's principales no están permitidos. – Oded

0

se puede dividir la cadena en partes usando string.split, y luego la Travese lista con un foreach aplicar int.TryParse, algo como esto:

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); 
} 

ahora tiene números de la lista de valores válidos

+0

hola Oded, gracias por la captura. Como se menciona en la primera oración, debe ser TryParse. Lo he corregido –

Cuestiones relacionadas