我在Windows操作系统下有关于文件名中非法字符使用的问题.我有以下功能,它应该用下划线字符替换任何非法字符.但是,由于某种原因,当我要替换的字符串是这样的时候"ABC_test\/:*?"<>|_Jan2016_ABC",我的函数不会替换反斜杠字符,最后的字符串是"ABC_test\_________Jan2016_ABC".你能否告诉我我做错了什么,因为我曾经期望在使用我的功能之后,不再存在非法的性格.我的功能是:
public static String ReplaceIllegalPathCharacters(String path, String replacement = "_")
{
string pattern = "[\\~#%&*{}//:<>?|\"-]";
Regex regEx = new Regex(pattern);
string final = Regex.Replace(regEx.Replace(path, replacement), @"\s+", " ");
return final;
}
Run Code Online (Sandbox Code Playgroud)
问候,
你需要双重转义反斜杠 - 一次用于C#,一次用于RegEx:
string pattern = "[\\\\~#%&*{}//:<>?|\"-]";
Run Code Online (Sandbox Code Playgroud)
我以前用来测试的代码:
void Main()
{
var stringToReplace = "ABC_test\\/:*?\"<>|_Jan2016_ABC";
string pattern = "[\\\\~#%&*{}//:<>?|\"-]";
Regex regEx = new Regex(pattern);
var final = regEx.Replace(stringToReplace, "_");
Console.WriteLine(final);
}
Run Code Online (Sandbox Code Playgroud)