Saltar al contenido

Cómo extraer un número decimal de string C ª#

Esta es la respuesta más correcta que encomtrarás brindar, pero estúdiala pausadamente y valora si se adapta a tu trabajo.

Solución:

Pequeña mejora a la solución de @Michael:

// NOTES: about the LINQ:
// .Where() == filters the IEnumerable (which the array is)
//     (c=>...) is the lambda for dealing with each element of the array
//     where c is an array element.
// .Trim()  == trims all blank spaces at the start and end of the string
var doubleArray = Regex.Split(sentence, @"[^0-9.]+")
    .Where(c => c != "." && c.Trim() != "");

Devoluciones:

10.4
20.5
40
1

La solución original estaba volviendo

[empty line here]
10.4
20.5
40
1
.

los expresión regular de extracción de números decimales/flotantes puede ser diferente dependiendo de si se usan y qué separadores de mil, qué símbolo denota un separador decimal, si también se quiere hacer coincidir un exponente, si hacer coincidir o no un signo positivo o negativo, si hacer coincidir o no números que pueden tener números iniciales 0 omitido, si se extrae o no un número que termina con un separador decimal.

A expresión regular genérica para que coincida con los tipos de números decimales más comunes se proporciona en Hacer coincidir números de punto flotante con una expresión regular:

[-+]?[0-9]*.?[0-9]+(?:[eE][-+]?[0-9]+)?

Solo cambié el grupo de captura a uno que no captura (agregado ?: después (). Coincide ingrese la descripción de la imagen aquí

Si necesita hacerlo aún más genérico, si el separador decimal puede ser un punto o una comareemplazar . con una clase de carácter (o una expresión entre paréntesis) [.,]:

[-+]?[0-9]*[.,]?[0-9]+(?:[eE][-+]?[0-9]+)?
           ^^^^

Nota las expresiones anteriores coinciden con números enteros y flotantes. Para hacer coincidir solo números flotantes/decimales asegúrese de que la parte del patrón fraccionario sea obligatoria eliminando la segunda ? después . (manifestación):

[-+]?[0-9]*.[0-9]+(?:[eE][-+]?[0-9]+)?
            ^

Ahora, 34 no coincide: ingrese la descripción de la imagen aquí está emparejado.

Si no desea hacer coincidir números flotantes sin ceros a la izquierda (como .5) hacer que el patrón de coincidencia del primer dígito sea obligatorio (agregando + cuantificador, para hacer coincidir 1 o más ocurrencias de dígitos):

[-+]?[0-9]+.[0-9]+(?:[eE][-+]?[0-9]+)?
          ^

Vea esta demostración. Ahora, coincide con muchas menos muestras:
ingrese la descripción de la imagen aquí

Ahora, qué pasa si no quieres emparejar . en el interior ...? como combinarlos como palabras completas? Utilizar miradas alrededor:

[-+]?(?

Y una demostración aquí:

ingrese la descripción de la imagen aquí

Ahora, ¿qué pasa con esos flotadores que tienen mil separadores, como 12 123 456.23 o 34,345,767.678? Puedes agregar (?:[,s][0-9]+)* después de la primera [0-9]+ para hacer coincidir cero o más secuencias de una coma o un espacio en blanco seguido de más de 1 dígito:

[-+]?(?

Vea la demostración de expresiones regulares:

ingrese la descripción de la imagen aquí

Intercambiar una coma con . si necesita usar una coma como separador decimal y un punto como separador de miles.

Ahora, ¿cómo usar estos patrones en C#?

var results = Regex.Matches(input, @"")
        .Cast()
        .Select(m => m.Value)
        .ToList();

tratar

Regex.Split (sentence, @"[^0-9.]+")

Sección de Reseñas y Valoraciones

Si tienes algún recelo y capacidad de reaccionar nuestro artículo te mencionamos añadir una interpretación y con placer lo leeremos.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 4)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Respuestas a preguntas comunes sobre programacion y tecnología