Necesito que el texto como "joe ($ 3,004.50)" se filtre a 3004.50 pero soy terrible en regex y no puedo encontrar una solución adecuada. Por lo tanto, solo deben permanecer los números y los períodos, todo lo demás se filtrará. Yo uso C# y VS.net marco 2008 3,5Regex para eliminar todo (período OR no numérico)
Respuesta
Esto debe hacerlo:
string s = "joe ($3,004.50)";
s = Regex.Replace(s, "[^0-9.]", "");
La expresión regular es:
[^0-9.]
puede almacenar en caché la expresión regular:
Regex not_num_period = new Regex("[^0-9.]")
a continuación, utilizar:
string result = not_num_period.Replace("joe ($3,004.50)", "");
Sin embargo, debe tener en cuenta que algunas culturas tienen diferentes convenciones para escribir montos monetarios, como por ejemplo: 3.004,50.
ATM Demasiado perezoso para verificar, pero no tiene que escapar el . ? –
@Andrew: no, dentro de una clase de personaje, '.' no tiene ningún significado especial. –
El enfoque de la eliminación de caracteres problemáticos es potencialmente problemática. ¿Qué pasa si hay otro .
en la cadena en alguna parte? No se eliminará, ¡aunque debería!
Al eliminar los dígitos o los puntos, la cadena joe.smith ($3,004.50)
se transformaría en el .3004.50
no dispersable.
Imho, es mejor hacer coincidir un patrón específico, y extraerlo usando un grupo. Algo sencillo sería encontrar todos contiguos comas, dígitos y períodos con expresión regular:
[\d,\.]+
muestra de ensayo por:
Pattern understood as:
[\d,\.]+
Enter string to check if matches pattern
> a2.3 fjdfadfj34 34j3424 2,300 adsfa
Group 0 match: "2.3"
Group 0 match: "34"
Group 0 match: "34"
Group 0 match: "3424"
Group 0 match: "2,300"
Luego, para cada partido, eliminar todas las comas y enviar eso al analizador. Para manejar el caso de algo como 12.323.344
, podría hacer otra comprobación para ver que una subcadena coincidente tiene como máximo un .
.
Para la respuesta aceptada, MatthewGunn plantea un punto válido en el sentido de que todos los dígitos, comas y puntos en toda la cadena se condensarán juntos. Esto evitará que:
string s = "joe.smith ($3,004.50)";
Regex r = new Regex(@"(?:^|[^w.,])(\d[\d,.]+)(?=\W|$)/)");
Match m = r.match(s);
string v = null;
if (m.Success) {
v = m.Groups[1].Value;
v = Regex.Replace(v, ",", "");
}
Que se trata de una cadena - cadena es un IEumerable<char>
, por lo que puede utilizar LINQ:
var input = "joe ($3,004.50)";
var result = String.Join("", input.Where(c => Char.IsDigit(c) || c == '.'));
Console.WriteLine(result); // 3004.50
- 1. Regex - Strip no numérico y eliminar centavos si hay alguno
- 2. Regex eliminar todo después de: (incluyendo :)
- 3. Eliminar todo entre paréntesis java usando regex
- 4. JavaScript regex: encuentre el carácter no numérico
- 5. Regex para eliminar espacios
- 6. php regex para eliminar HTML
- 7. Regex para eliminar comentarios condicionales
- 8. Regex + Eliminar todo el texto antes del partido
- 9. Regex búsqueda de todo pero no vacío
- 10. RegEx para seleccionar todo entre dos caracteres?
- 11. Regex para un rango numérico de números negativos?
- 12. Regex para aplicar alfa-numérico pero ¿permite apóstrofes y guiones?
- 13. .NET Regex, solo numérico, sin espacios
- 14. Regex para contraseña que requiere un carácter numérico o no alfanumérico
- 15. Reemplazar todo entre [y] en regex java
- 16. Regex para eliminar caracteres no alfanuméricos de cadenas UTF8
- 17. de expresiones regulares para eliminar todo menos caracteres y números
- 18. Regex para eliminar un carácter repetido específico
- 19. Regex para eliminar letras, símbolos excepto números
- 20. Regex eliminar saltos de línea
- 21. 'seleccionar todo' y 'eliminar todo' con choose.js
- 22. PHP regex para eliminar múltiples? -marks
- 23. Regex en Javascript para eliminar enlaces
- 24. hibernar y eliminar todo
- 25. REGEX: Seleccione todo NO igual a una determinada cadena
- 26. Regex eliminar caracteres especiales
- 27. Regex - coincide con todo, pero barra inclinada
- 28. Regex: permite todo excepto algunos caracteres seleccionados
- 29. Reemplazar no numérico con cadena vacía
- 30. C# Regex Split - todo dentro de corchetes
¡No sabía que podía hacer esto, gracias! – VoodooChild
gracias de hecho :) –
¿Qué pasa con 'joe.smith ($ 3,004.50)'? Simplemente eliminar las clases de personajes ofensivos puede ir bastante mal. –