C# 如何使用Regex.Replace一次替换两个字符串?
我有下面的方法替换文件名中的“pound”符号,但我也希望能够同时替换“single撇号”。我怎么做? 这是filename=Provider license_A'R_Ab#acus solutions_1-11-09.xls的值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
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())