繁体   English   中英

使用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;

        }

我想念什么,谢谢

正则表达式中的某些字符,特别是[ ] ( ) ^在正则表达式中具有特殊含义 ,为了从字面上使用它们,必须对其进行转义。

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

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

请注意,有必要使用@ verbatim字符串,因为我们不想只从Regex 字符串中转义这些字符。

或者,再次转义反斜杠:

Regex rgx = new 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;
}

我在这里开小提琴

用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;

    }

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

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

var builder = new StringBuilder();

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

return builder.ToString();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM