2012-03-19 75 views
10

Si tengo una cadena de datos con números. Este patrón no es consistente. Me gustaría extraer todos los números de la cadena y solo un carácter que se define como permitido. Pensé que RegEx podría ser la forma más fácil de hacer esto. Podría dar un golpeteo de expresiones regulares que pueden hacer esto ya que creo que la expresión regular es el vudú y hombres de medicina solamente expresiones regulares sabe cómo funcionaRegEx para reemplazar todos los caracteres, excepto los números

por ejemplo/

"Q1W2EE3R45T" = "12345" 
"WWED456J" = "456" 
"ABC123" = "123" 
"N123" = "N123" //N is an allowed character 

ACTUALIZACIÓN: Aquí está mi código:

var data = Value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 
data = data.Select(x => Regex.Replace(x, "??????", String.Empty)).ToArray(); 
+0

son las cadenas muy largas ?? a no es una opción? – gbianchi

+0

Abajo voto ¿por qué? – Jon

+0

'" regex es vudú y solo los médicos de medicina regular saben cómo funciona ". ¡No es verdad! Tiene mucho sentido una vez que lo pienses cuidadosamente, pieza por pieza. – katrielalex

Respuesta

12
String numbersOnly = Regex.Replace(str, @"[^\d]", String.Empty); 

Usando Regex.Replace(string,string,string) método estático.

Sample

Para permitir N puede cambiar el patrón de [^\dN]. Si está buscando n también puede aplicar RegexOptions.IgnoreCase o cambiar la clase a [^\dnN]

+0

¡Uy! Acabo de darme cuenta de que necesito permitir el carácter 'N' – Jon

+1

Creo que es [^ \ dN] – Jon

+0

@Jon: actualicé mi respuesta para permitir 'N'. –

3

¡No necesita usar expresiones regulares! Solo mira a través de los personajes y pregúntales a cada uno si son dígitos.

s.Where(Char.IsDigit) 

O si lo necesita como una cadena

new String(s.Where(Char.IsDigit).ToArray()) 

EDITAR Al parecer también necesita 'N':

new String(s.Where(c => Char.IsDigit(c) || c == 'N').ToArray()) 

EDITAR EDITAR Ejemplo:

var data = Value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries); 
data = data.Select(s => 
    new String(s.Where(c => Char.IsDigit || c == 'N').ToArray()) 
).ToArray(); 

Eso es un poco horrible - lambdas anidados - por lo que es mejor que uses la expresión regular para mayor claridad.

+0

¿Puedes usar mi LINQ para mostrar tu respuesta ya que IsDigit solo verificará un carácter en la cadena? – Jon

+0

@Jon ¿qué? No entiendo tu oración. – katrielalex

+0

Puedes usar el código en mi pregunta para mostrar cómo encajaría tu respuesta en él – Jon

1

¿Qué tal algo en la línea de

String s = ""; 
for (int i = 0; i < myString.length;){ 
    if (Char.IsDigit(myString, i)){ s += myString.Chars[i]; } 
} 
+0

El usuario editó la publicación .. Necesita N también ... – gbianchi

Cuestiones relacionadas