¿Cómo elimino todos los caracteres no alfanuméricos de una cadena, excepto los caracteres de guión y espacio?¿Cómo elimino todos los caracteres no alfanuméricos de una cadena excepto el guión?
Respuesta
Reemplace [^a-zA-Z0-9 -]
con una secuencia vacía.
Regex rgx = new Regex("[^a-zA-Z0-9 -]");
str = rgx.Replace(str, "");
La expresión regular es [^\w\s\-]*
:
\s
es mejor usar en lugar del espacio (), porque puede haber una ficha en el texto.
a menos que quiera eliminar pestañas. –
... y saltos, y todos los demás caracteres considerados "espacios en blanco". –
Esta solución es muy superior a las soluciones anteriores ya que también admite caracteres internacionales (no ingleses). string s = "Mötley Crue 日本人: の;; y; Kanji 愛 y Hiragana あ い; cadena r = Regex.Replace (s, "[^ \\ w \\ s -] *", ""); Lo anterior produce r con: Mötley Crue 日本人 の 氏 名 y Kanji 愛 y Hiragana あ い – danglund
que puede probar:
string s1= Regex.Replace(s,"[^A-Za-z0-9 _]","");
Dónde s
es su cadena.
OP preguntó por el guión no subrayar –
Podría haber usado RegEx, pueden proporcionar una solución elegante pero pueden causar problemas de rendimiento. Aquí es una solución
char[] arr = str.ToCharArray();
arr = Array.FindAll<char>(arr, (c => (char.IsLetterOrDigit(c)
|| char.IsWhiteSpace(c)
|| c == '-')));
str = new string(arr);
Cuando se utiliza el marco compacto (que no tiene FindAll)
Reemplazar FindAll con
char[] arr = str.Where(c => (char.IsLetterOrDigit(c) ||
char.IsWhiteSpace(c) ||
c == '-')).ToArray();
str = new string(arr);
en mi prueba, esta técnica fue mucho más rápido. para ser precisos, era apenas por debajo de 3 veces más rápido que la técnica Regex Replace. – Dan
También maneja caracteres Unicode, no solo US ASCII. – user755327
El marco compacto no tiene FindAll, puede reemplazar FindAll con 'char [] arr = str.Where (c => (char.IsLetterOrDigit (c) || char.IsWhiteSpace (c) || c == '- ')). ToArray(); ' – ShawnFeatherly
Usando System.Linq
string withOutSpecialCharacters = new string(stringWithSpecialCharacters.Where(c =>char.IsLetterOrDigit(c) || char.IsWhiteSpace(c) || c == '-').ToArray());
he hecho una solución diferente, eliminando el control caracteres, lo cual era mi problema original.
Es mejor que poner en una lista todos los "especial, pero bueno" char de
char[] arr = str.Where(c => !char.IsControl(c)).ToArray();
str = new string(arr);
Está más simple, así que creo que sea mejor!
Basado en la respuesta para esta pregunta, creé una clase estática y las agregué. Pensé que podría ser útil para algunas personas.
public static class RegexConvert
{
public static string ToAlphaNumericOnly(this string input)
{
Regex rgx = new Regex("[^a-zA-Z0-9]");
return rgx.Replace(input, "");
}
public static string ToAlphaOnly(this string input)
{
Regex rgx = new Regex("[^a-zA-Z]");
return rgx.Replace(input, "");
}
public static string ToNumericOnly(this string input)
{
Regex rgx = new Regex("[^0-9]");
return rgx.Replace(input, "");
}
}
A continuación, los métodos se pueden utilizar como:
string example = "[email protected]#$";
string alphanumeric = example.ToAlphaNumericOnly();
string alpha = example.ToAlphaOnly();
string numeric = example.ToNumericOnly();
quieren algo rápido?
public static class StringExtensions
{
public static string ToAlphaNumeric(this string self, params char[] allowedCharacters)
{
return new string(Array.FindAll(self.ToCharArray(), c => char.IsLetterOrDigit(c) || allowedCharacters.Contains(c)));
}
}
Esto le permitirá especificar qué caracteres desea permitir también.
Hay una manera mucho más fácil con Regex.
private string FixString(string str)
{
return string.IsNullOrEmpty(str) ? str : Regex.Replace(str, "[\\D]", "");
}
solo reemplaza los caracteres no numéricos – frostymarvelous
Utilizo una variación de una de las respuestas aquí.Quiero reemplazar espacios con "-" para que sea amigable con SEO y también para minúsculas. Tampoco hace referencia al sistema.web desde mi capa de servicios.
private string MakeUrlString(string input)
{
var array = input.ToCharArray();
array = Array.FindAll<char>(array, c => char.IsLetterOrDigit(c) || char.IsWhiteSpace(c) || c == '-');
var newString = new string(array).Replace(" ", "-").ToLower();
return newString;
}
Aquí hay una solución rápida de asignación de montón no Regex que era lo que estaba buscando.
Edición insegura.
public static unsafe void ToAlphaNumeric(ref string input)
{
fixed (char* p = input)
{
int offset = 0;
for (int i = 0; i < input.Length; i++)
{
if (char.IsLetterOrDigit(p[i]))
{
p[offset] = input[i];
offset++;
}
}
((int*)p)[-1] = offset; // Changes the length of the string
p[offset] = '\0';
}
}
Y para aquellos que no quieren usar inseguros o no confían en el hack de longitud de cadena.
public static string ToAlphaNumeric(string input)
{
int j = 0;
char[] newCharArr = new char[input.Length];
for (int i = 0; i < input.Length; i++)
{
if (char.IsLetterOrDigit(input[i]))
{
newCharArr[j] = input[i];
j++;
}
}
Array.Resize(ref newCharArr, j);
return new string(newCharArr);
}
- 1. ¿Cómo elimino caracteres no alfanuméricos (espacios incluidos) de una cadena?
- 2. ¿Cómo elimino caracteres no alfanuméricos de una cadena y mantengo espacios?
- 3. Eliminar todos los caracteres no alfanuméricos mediante preg_replace
- 4. ¿Cómo eliminar todos los caracteres no alfanuméricos y sin espacio de una cadena en PHP?
- 5. Cómo quitar todos los caracteres no alfanuméricos de una cadena en C++?
- 6. cadena de java dividida en todos los apóstrofes no alfanuméricos excepto
- 7. Devolver todos los caracteres antes del primer guión bajo
- 8. expresión regular todos los caracteres excepto último
- 9. ¿Cómo determinar si una cadena tiene caracteres no alfanuméricos?
- 10. Eliminación de caracteres no alfanuméricos de una cadena
- 11. Eliminar todos los caracteres excepto los alfabetos y los números de una cadena de Ruby
- 12. Cómo comprobar los caracteres alfanuméricos
- 13. ¿Cómo elimino los últimos n caracteres de una cadena?
- 14. RegEx para reemplazar todos los caracteres, excepto los números
- 15. iphone sdk - Elimine todos los números, excepto los caracteres a-z de una cadena
- 16. Cómo reemplazar todos los caracteres en una cadena de entrada de usuario, excepto uno
- 17. Google usando caracteres no alfanuméricos
- 18. UTF-8 Cadena eliminar todos los caracteres invisibles excepto una línea nueva
- 19. Regex para permitir solo caracteres alfanuméricos, coma, guión, guión bajo y punto y coma
- 20. Cómo eliminar todos los caracteres de una cadena
- 21. caracteres cheque alfanuméricos en cadena en C#
- 22. ¿Cómo elimino todos los divs de clase excepto los 2 últimos usando jquery?
- 23. ¿Cómo elimino todos los intervalos?
- 24. Java eliminar caracteres no numéricos de la cadena excepto x
- 25. ¿Cómo se eliminan todos los caracteres alfabéticos de una cadena?
- 26. ¿Manera elegante de contar caracteres alfanuméricos en una cadena?
- 27. Eliminando todo menos los caracteres alfanuméricos de una cadena en PHP
- 28. expresiones regulares Las expresiones para todos los símbolos no alfanuméricos
- 29. Eliminar todos los caracteres no ASCII de la cadena
- 30. Caracteres no alfanuméricos en los nombres de interfaz COM/.NET
Merece la pena mencionar que '-' debe estar al final de la clase de caracteres, o se ha escapado con una barra invertida, para evitar que se use para un rango. –
Estoy usando ASP clásico (no C# como la pregunta original está etiquetada) - si ingreso: 50025454 $ esto funciona bien, pero si ingreso 50025454 $$, esto falla. (Necesito agregar + a la expresión regular). ¿Es esto lo mismo en C#? – Dan
Dicho esto, usando Regex rgx = new Regex ("[^ a-zA-Z0-9 -] +") y tratando 5002 $ 5454 $ aún falla. – Dan