正则表达式替换除斜线之外的所有特殊字符?

时间:2011-11-17 19:52:10

标签: c# regex

我正在尝试制定一些正则表达式,它将消除SharePoint在创建文件夹时不会采用的所有特殊字符。

这些是不允许的字符,我假设下面的底部正则表达式将处理所有这些。但我也希望用短划线替换\或/。

~ " # % & * : < > ? / \ { | }

所以这就是我到目前为止所做的,但是如果可能的话,我希望将这一切都合并到一个函数中。

 private void RemoveAndReplaceSpecialCharacters(string input)
    {
        Regex.Replace(input, @"\\", @"-");
        Regex.Replace(input, @"/", @"-");
        Regex.Replace(input, @"[^0-9a-zA-Z\._]", string.Empty);
    }

3 个答案:

答案 0 :(得分:4)

前两个替换版本不需要Regex.Replace,因此您可以将它们合并为一个,或者,因为它们被相同的字符替换,所以继续使用Regex.Replace但只使用其中一个。我也冒昧地让你的功能

private string RemoveAndReplaceSpecialCharacters(string input) {
    return Regex.Replace(Regex.Replace(input, "[\\\\/]", "-"), @"[^0-9a-zA-Z\._]", string.Empty);
}

您可以在没有正则表达式的情况下执行此操作:(未经测试)

private string RemoveAndReplaceSpecialCharacters(string input) {
    const string ALLOWED_CHARACTERS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ._-";
    return new string(input.Replace('/', '-').Replace('\\', '-').RemoveAll((c) => !ALLOWED_CHARACTERS.Contains(c)).ToArray());
}

答案 1 :(得分:0)

 private void RemoveAndReplaceSpecialCharacters(string input)
    {
        Regex.Replace(input, @"[\\\/]+", "-");
            Regex.Replace(input, @"[^0-9a-zA-Z\._]+", string.Empty);
    }

答案 2 :(得分:0)

此?

var foo = @"aa\b\hehe";
var baa = Regex.Replace(foo, @"[^\\/]+", "-");