2009-06-25 9 views
2

J'ai la méthode suivante qui remplace un signe "pound" du nom de fichier mais je veux aussi pouvoir remplacer le "single apostrophe '" en même temps. Comment puis-je le faire? Ce est la valeur du nom de fichier = Fournisseur license_A'R_Ab # ACU Settlements_1-11-09.xlsComment utiliser Regex.Replace pour remplacer deux chaînes à la fois?

static string removeBadCharPound(string filename) 
{   // Replace invalid characters with "_" char.    
    //I want something like this but is NOT working 
    //return Regex.Replace(filename, "# ' ", "_"); 
    return Regex.Replace(filename, "#", "_"); 
} 

Répondre

18

Essayez

return Regex.Replace(filename, "[#']", "_"); 

Rappelez-vous, je ne suis pas sûr que regex est susceptible de être plus rapide que le peu plus simple:

+2

Il doit être plus rapide puisque vous compilez à regex dans le second exemple et analyser la chaîne (au moins) deux fois (sans parler d'une supplémentaire instance de chaîne et le surcoût de la copie) – Blindy

+10

Testé sur ma machine, pour 100 000 itérations, RegEx a pris 677 ms, le remplacement a pris 143 ms. –

+1

@Blindy: Qu'est-ce qui vous fait penser que le second exemple utilise des expressions régulières? –

7

Et juste pour le plaisir, vous pouvez accomplir la même chose avec LINQ:

var result = from c in fileName 
      select (c == '\'' || c == '#') ? '_' : c; 
return new string(result.ToArray()); 

Ou, comprimé à un sexy one-liner:

return new string(fileName.Select(c => c == '\'' || c == '#' ? '_' : c).ToArray()) 
Questions connexes