正则表达式功能不适用于一个非法字符

时间:2016-02-03 12:52:17

标签: c#

我在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;
}

此致

2 个答案:

答案 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)

就像侧节点一样:匹配模式中不需要双正斜杠。

(我会评论,但我还没有足够的代表)