使用 RegEx 从字符串中删除特殊字符

Removing special characters from a string with RegEx

正在读取包含单词、数字和特殊字符的文本文件,我想删除某些特殊字符,例如:[](),'

我有这个代码,但它不起作用!

using (var reader = new StreamReader ("C://Users//HP//Documents//result2.txt")) {
            string line = reader.ReadToEnd ();

            Regex rgx = new Regex ("[^[]()',]");
            string res = rgx.Replace (line, "");
            Message1.text = res;

        }

我错过了什么,谢谢

一次替换一个 String.Replace:

using (var reader = new StreamReader ("C://Users//HP//Documents//result2.txt")) 
{
        string line = reader.ReadToEnd ();

        string res = line.Replace(line, "[", "");
        res  = res.Replace(line, "]", "");
        res  = res.Replace(line, "(", "");
        res  = res.Replace(line, ")", "");
        res  = res.Replace(line, "'", "");
        res  = res.Replace(line, ",", "");
        Message1.text = res;

    }

正则表达式中的一些字符,特别是 [ ] ( ) ^,保持 special meaning in Regex 并且为了按字面意义使用它们,它们必须被转义。

使用以下正确转义的正则表达式:

Regex rgx = new Regex (@"[\^\[\]\(\)',]");

请注意,必须使用 @ 逐字字符串,因为我们不想从字符串 中转义这些字符 ,只能从正则表达式中转义。

或者,双重转义反斜杠:

Regex rgx = new Regex ("[\^\[\]\(\)',]");

但在这种情况下可读性较差。

您可以跳过 Regex,只维护一个要删除的字符列表,然后替换旧的方式:

string[] specialCharsToRemove = new [] { "[", "]", "(", ")", "'", "," };

using (var reader = new StreamReader ("C://Users//HP//Documents//result2.txt")) 
{
    string line = reader.ReadToEnd();
    foreach(string s in specialCharsToRemove)
    {
        line = line.Replace(s, string.Empty);
    } 
    Message1.text = res;            
}

理想情况下,这将采用自己的方法,如下所示:

private static string RemoveCharacters(string input, string[] specialCharactersToRemove)
{
    foreach(string s in specialCharactersToRemove)
    {
        input = input.Replace(s, string.Empty);
    }
    return input;
}

我做了一个fiddlehere

我同意为此避免使用正则表达式,但我也不会多次使用 string.Replace。

考虑实现接受要替换的字符数组的 Replace 或 Remove 方法,并且只扫描输入字符串一次。例如:

var builder = new StringBuilder();

foreach (char ch in input)
{
    if (!chars.Contains(ch))
    {
        builder.Append(ch):
    }
}

return builder.ToString();