2010-06-09 12 views
21

Ho una directory con molte cartelle, sottocartelle e tutte con i file al loro interno. L'idea del mio progetto è di ricorrere all'intera directory, raccogliere tutti i nomi dei file e sostituire i caratteri non validi (non valido per una migrazione di SharePoint).Utilizzo di RegEx per sostituire i caratteri non validi

Tuttavia, sono completamente estraneo alle espressioni regolari. I personaggi che ho bisogno di eliminare nei nomi dei file sono: ~, #, %, &, *, { } , \, /, :, <>, ?, -, | e "" Voglio sostituire questi caratteri con uno spazio vuoto. Speravo di utilizzare un metodo string.replace() per esaminare tutti questi nomi di file e fare la sostituzione.

Finora, l'unico codice che ho ottenuto è la ricorsione. Stavo pensando alla ricorsione che esamina l'unità, recupera i nomi di questi file e li inserisce in un List<string>.

Qualcuno può aiutarmi a trovare/sostituire caratteri non validi con RegEx con quei caratteri specifici?

+5

Perché si desidera utilizzare 'RegEx' quando' string.Replace' farebbe un lavoro adeguato? – Oded

+0

Ci sono altre regole per le cartelle non valide, ad es. un periodo alla fine. Vedere [Informazioni sui caratteri che non è possibile utilizzare in nomi di siti, nomi di cartelle e nomi di file in SharePoint] (https://support.microsoft.com/en-us/kb/905231) – sschoof

risposta

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

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

Questo sostituirà anche le corse di spazi bianchi con un singolo spazio.

+2

'string pattern =" [\ \ ~ #% & * {} /: <>? | "-]"; 'è migliore - meno inutili di escape. –

+0

@Tim grazie! Modificherò la mia soluzione. La maggior parte della mia esperienza regex è in Perl, dove uso regex letterali, quindi non sono del tutto sicuro di cosa debba essere sfuggito e cosa non sia in C# o Java: è per lo più trial-and-error –

+0

Ho appena notato che yeahumok voleva sostituire i caratteri non validi con uno spazio, non stringa vuota Ho rimosso di nuovo '+' dalla mia versione, aspettandomi che volesse uno spazio per ogni carattere non valido, anche se ce ne sono diversi di fila. –

7

c'è un modo per sbarazzarsi degli spazi extra?

provare qualcosa di simile:

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

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

considerare l'apprendimento a bit about regular expressions te stesso, come è anche molto utile per lo sviluppo (ad esempio, ricerca/sostituzione in Visual Studio).

+0

c'è un modo per rimuovere qualsiasi 'estraneo'. ' (periodi) in un nome file? ad esempio: 0.0.0.1.doc Come gestirlo senza cancellare il doc? – yeahumok

Problemi correlati