2011-06-15 56 views

Respuesta

30
input = Regex.Replace(input, "[^0-9]+", string.Empty); 
1
string snum = System.Text.RegularExpression.Regex.Match(s, "\d+").Value; 
int num; 
if (!int.TryParse(snum, out num)) 
    throw new Exception(); 
1

Debe utilizar expresiones regulares - son una forma muy poderosa para Combina cadenas de texto con ciertos patrones, y este es un gran escenario para usarlos.

El patrón "\d+" coincidirá con una secuencia de 1 o más dígitos. Un método simple que utiliza este patrón para extraer todos números de una cadena es el siguiente:

public static List<int> ExtractInts(string input) 
{ 
    return Regex.Matches(input, @"\d+") 
     .Cast<Match>() 
     .Select(x => Convert.ToInt32(x.Value)) 
     .ToList(); 
} 

por lo que podría utilizar de esta manera:

List<int> result = ExtractInts("(01 - ABCDEFG)"); 

Por alguna información más detallada sobre las expresiones regulares , vea this page (MSDN) o this page (helpful "cheat sheet").

3

intente esto:

Convert.ToInt32(string.Join(null, System.Text.RegularExpressions.Regex.Split(s, "[^\\d]"))) 

devuelve valor entero 1.

1

Compruebe hacia fuera esta entrada de blog: http://weblogs.asp.net/sushilasb/archive/2006/08/03/How-to-extract-numbers-from-string.aspx

Un sencillo programa que extrae el número de la cadena mediante una expresión regular .

class Program 
    { 
    static void Main(string[] args) 
    { 
     Console.WriteLine(ExtractNumbers("(01 - ABCDEFG)")); // 01 
     Console.ReadLine(); 
    } 

    static string ExtractNumbers(string expr) 
    { 
     return string.Join(null, System.Text.RegularExpressions.Regex.Split(expr, "[^\\d]")); 
    } 
} 

Hope this helps!

8

Hay cuatro maneras diferentes de hacerlo (bueno, probablemente más, pero he seleccionado estos).

# 1: Regex de Bala R

string output = Regex.Replace(input, "[^0-9]+", string.Empty); 

# 2: Regex de donut y agente-j

string output = Regex.Match(input, @"\d+").Value; 

# 3: Linq

string output = new string(input.ToCharArray().Where(c => char.IsDigit(c)).ToArray()); 

# 4: Subcadena, para que esto funcione, el guion debe estar en la cadena entre los dígitos y el texto.

string output = input.Substring(0, input.IndexOf("-")).Replace(" ", ""); 

Con estas entradas:

string input1 = "01 - ABCDEFG"; 
string input2 = "01 - ABCDEFG123"; 

Para 1 y 2 los resultados serían:

output1 = "01"; 
output2 = "01123"; 

para 3 y 4 los resultados serían:

output1 = "01"; 
output2 = "01"; 

Si el resultado esperado es obtener todos los dígitos en la str ing, use # 1 o # 2, pero si el resultado esperado es solo obtener los dígitos antes del guión, use # 3 o # 4.

Con cuerdas tan cortas como esta # 1 y # 2 son aproximadamente iguales en velocidad y también para # 3 y # 4, pero si hay muchas iteraciones o las cuerdas son cuatro veces más o más # 2 es más rápido que # 1 y # 4 es más rápido que # 3.

Nota: Si los paréntesis se incluye en las cadenas # 4 tiene que ser modifyed a esto, pero eso no hará que sea mucho más lento:

string output = input.Substring(0, input.IndexOf("-")).Replace(" ", "").Replace("(", ""); 
0
Response.Write(Convert.ToDecimal(string.Join(null, System.Text.RegularExpressions.Regex.Split(TextBox1.Text, "[^\\d .]")))); 

Esto es para tanto int y decimal números.

0

Prueba esto:

string XYZ = string.Join(null, System.Text.RegularExpressions.Regex.Split(“XYZ 77”, “[^\d]”)); 
Cuestiones relacionadas