C# 如何使用Regex.Replace一次替换两个字符串?

C# 如何使用Regex.Replace一次替换两个字符串?,c#,regex,replace,C#,Regex,Replace,我有下面的方法替换文件名中的“pound”符号,但我也希望能够同时替换“single撇号”。我怎么做? 这是filename=Provider license_A'R_Ab#acus solutions_1-11-09.xls的值 static string removeBadCharPound(string filename) { // Replace invalid characters with "_" char. //I want s

我有下面的方法替换文件名中的“pound”符号,但我也希望能够同时替换“single撇号”。我怎么做? 这是filename=Provider license_A'R_Ab#acus solutions_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, "#", "_");
 }
试一试

请注意,我不确定正则表达式是否比简单的正则表达式更快:

return filename.Replace('#', '_')
               .Replace('\'', '_');

为了好玩,你可以用LINQ完成同样的事情:

var result = from c in fileName
             select (c == '\'' || c == '#') ? '_' : c;
return new string(result.ToArray());
或者,压缩成性感的一行:

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

它必须更快,因为在第二个示例中编译到regex,并在我的机器上测试两次(至少)解析字符串(更不用说额外的字符串实例和复制它的开销),在100000次迭代中,regex花费了677毫秒,替换为143 ms.@Blindy:你怎么会认为第二个示例使用正则表达式?(另一种选择是使用一个编译一次并存储在静态变量中的正则表达式。我通常还是更喜欢字符串。不过为了简单起见,替换版本。)我还发现,如果不使用正则表达式就可以很容易地实现,那么这样做肯定会更好。
return new string(fileName.Select(c => c == '\'' || c == '#' ? '_' : c).ToArray())