我在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;
}
此致
答案 0 :(得分:6)
你需要双重转义反斜杠 - 一次用于C#,一次用于RegEx:
string pattern = "[\\\\~#%&*{}//:<>?|\"-]";
我以前用来测试的代码:
void Main()
{
var stringToReplace = "ABC_test\\/:*?\"<>|_Jan2016_ABC";
string pattern = "[\\\\~#%&*{}//:<>?|\"-]";
Regex regEx = new Regex(pattern);
var final = regEx.Replace(stringToReplace, "_");
Console.WriteLine(final);
}
答案 1 :(得分:0)
就像侧节点一样:匹配模式中不需要双正斜杠。
(我会评论,但我还没有足够的代表)