什么都做不了是什么意思?我在控制台应用程序中运行了以下内容:
string name = ";;;'']][[ zion \\\\[[[]]]";
char[] invalidChars = System.IO.Path.GetInvalidPathChars();
string invalidString = Regex.Escape(new string(invalidChars));
string valid = Regex.Replace(name, "[" + invalidString + "]", "");
Console.WriteLine(valid);
顺便说一句,您的语法错误,您有一些未转义的字符,并且缺少分号。
我得到了以下结果。
;;;'']][[ zion \\[[[]]]
这是正确的结果。也许您应该问一个关于您正在尝试做什么的新问题,因为您当前的方法似乎表明您对 Regex 没有深入的了解。
更新:您是否要检查文件名?如果是这样,您可能想使用:
System.IO.Path.GetInvalidFileNameChars();
更新:这是来自该方法的无效字符列表GetInvalidPathChars()
RealInvalidPathChars = new char[] {
'"', '<', '>', '|', '\0', '\x0001', '\x0002', '\x0003', '\x0004', '\x0005', '\x0006', '\a', '\b', '\t', '\n', '\v',
'\f', '\r', '\x000e', '\x000f', '\x0010', '\x0011', '\x0012', '\x0013', '\x0014', '\x0015', '\x0016', '\x0017', '\x0018', '\x0019', '\x001a', '\x001b',
'\x001c', '\x001d', '\x001e', '\x001f'
};
所以基本上以下是无效的路径字符可能包括 ASCII/Unicode 字符 1 到 31,以及引号 (")、小于 (<)、大于 (>)、管道 (|)、退格 (\b)、null (\0) 和制表符 (\t)。
这些似乎都没有出现在您的原始字符串中。