2010-06-09 25 views
21

Tengo un directorio con muchas carpetas, subcarpetas y todo con archivos en ellas. La idea de mi proyecto es recurrir a través de todo el directorio, reunir todos los nombres de los archivos y reemplazar los caracteres no válidos (no válido para una migración de SharePoint).Uso de RegEx para reemplazar caracteres no válidos

Sin embargo, estoy completamente familiarizado con las expresiones regulares. Los caracteres que necesito eliminar en los nombres de archivo son: ~, #, %, &, *, { } , \, /, :, <>, ?, -, | y "" Quiero reemplazar estos caracteres con un espacio en blanco. Esperaba usar un método string.replace() para revisar todos estos nombres de archivo y hacer el reemplazo.

Hasta ahora, el único código que he obtenido es la recursión. Estaba pensando en la recursividad escaneando la unidad, obteniendo los nombres de estos archivos y poniéndolos en un List<string>.

¿Alguien puede ayudarme a encontrar/reemplazar caracteres inválidos con RegEx con esos caracteres específicos?

+5

¿Por qué quieres usar 'RegEx' cuando' string.Replace' haría un trabajo adecuado? – Oded

+0

Existen algunas reglas más para las carpetas no válidas, p. Ej. un período al final. Consulte [Información sobre los caracteres que no puede usar en nombres de sitios, nombres de carpetas y nombres de archivos en SharePoint] (https://support.microsoft.com/en-us/kb/905231) – sschoof

Respuesta

42
string pattern = "[\\~#%&*{}/:<>?|\"-]"; 
string replacement = " "; 

Regex regEx = new Regex(pattern); 
string sanitized = Regex.Replace(regEx.Replace(input, replacement), @"\s+", " "); 

Esto reemplazará las carreras de espacios en blanco con un solo espacio también.

+2

'string pattern =" [\ \ ~ #% & * {} /: <>? | "-]"; 'es mejor - menos escape innecesario. –

+0

@Tim gracias! Editaré mi solución. La mayor parte de mi experiencia con expresiones regulares está en Perl donde uso expresiones regulares Literales. Así que no estoy del todo seguro de lo que necesita ser escapado y lo que no en C# o Java. Se trata principalmente de prueba y error. –

+0

Me di cuenta de que yeahumok quería reemplazar los caracteres no válidos con un espacio, no el cadena vacía. He eliminado nuevamente el '+' de mi versión, esperando que quiera un espacio para cada carácter no válido, incluso si hay varios en una fila. –

7

¿hay alguna manera de deshacerse de los espacios adicionales?

intentar algo como esto:

string pattern = " *[\\~#%&*{}/:<>?|\"-]+ *"; 
string replacement = " "; 

Regex regEx = new Regex(pattern); 
string sanitized = regEx.Replace(input, replacement); 

considerar el aprendizaje a bit about regular expressions a sí mismo, ya que es también muy útil en el desarrollo (por ejemplo, buscar/reemplazar en Visual Studio).

+0

también, ¿Hay alguna forma de eliminar cualquier '' extraño ''? (puntos) en un nombre de archivo? por ejemplo: 0.0.0.1.doc ¿Cómo manejaría esto sin eliminar el .doc? – yeahumok

Cuestiones relacionadas