2

我想用 string.Empty 替换这些字符:'"<>?*/\| 在给定的文件名中如何使用正则表达式来做到这一点我试过这个:

Regex r = new Regex("(?:[^a-z0-9.]|(?<=['\"]))", RegexOptions.IgnoreCase | RegexOptions.CultureInvariant | RegexOptions.Compiled);
                 FileName = r.Replace(FileName, String.Empty);

但这会将所有特殊字符替换为 String.Empty。

4

2 回答 2

5

您可以使用Regex.Replace方法。它做它的名字所暗示的。

Regex regex = new Regex(@"[\\'\\""\\<\\>\\?\\*\\/\\\\\|]");
var filename = "dfgdfg'\"<>?*/\\|dfdf";
filename = regex.Replace(filename, string.Empty);

但是我宁愿对您当前使用的文件系统下的文件名中禁止的所有字符进行清理,而不仅仅是您在正则表达式中定义的字符,因为您可能忘记了一些东西:

private static readonly char[] InvalidfilenameCharacters = Path.GetInvalidFileNameChars();

public static string SanitizeFileName(string filename)
{
    return new string(
        filename
            .Where(x => !InvalidfilenameCharacters.Contains(x))
            .ToArray()
    );
}

进而:

var filename = SanitizeFileName("dfgdfg'\"<>?*/\\|dfdf");
于 2012-08-23T09:59:47.760 回答
2

看看这里怎么做:

如何从路径和文件名中删除非法字符?

记得使用 Path.GetInvalidFileNameChars()

于 2012-08-23T10:09:52.230 回答