tags:

views:

1444

answers:

2

I have the following method that is replacing a "pound" sign from the file name but I want also to be able to replace the "single apostrophe ' " at the same time. How can I do it? This is the value of filename =Provider license_A'R_Ab#acus Settlements_1-11-09.xls

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, "#", "_");
 }
+8  A: 

Try

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

Mind you, I'm not sure that a regex is likely to be faster than the somewhat simpler:

return filename.Replace('#', '_')
               .Replace('\'', '_');
Jon Skeet
It has to be faster since you compile to regex's in the second example and parse the string (at least) twice (not to mention an extra string instance and the overhead of copying it over)
Blindy
Tested on my machine, for 100,000 iterations, RegEx took 677 ms, Replace took 143 ms.
Patrick McDonald
@Blindy: What makes you think the second example uses regular expressions at all?
Jon Skeet
(Another alternative is to use a regular expression compiled *once* and stored in a static variable. I'd still generally prefer the String.Replace version for simplicity though.)
Jon Skeet
I've also found that if you can do it without a regular expression easily enough, it's invariably better to do so.
patjbs
+2  A: 

And just for fun, you can accomplish the same thing with LINQ:

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