首页 > 解决方案 > 在 C# 中使用正则表达式从字符串中删除无效字符

问题描述

我发现了有关此主题的几篇文章,但提到的解决方案在我的情况下不起作用。

考虑以下代码:

    static void Main(string[] args)
    {
        string rgs = "^[ -~]*(?:\r?\n[ -~]*)*$";

        string TestStrNoMatch = "One\tTwo\r\nThree Ö";
        string TestStrMatch = "OneTwo\r\nThree ";

        Regex rgx = new Regex(rgs);

        bool Match = rgx.IsMatch(TestStrNoMatch); // false

        Match = rgx.IsMatch(TestStrMatch); // true

        string result = Regex.Replace(TestStrNoMatch, rgs, "");

        // result is the same as TestStrNoMatch
    }

预期的结果是删除 \t 和 Ö,但这并没有发生。结果的值与 TestStrNoMatch 完全相同

澄清:我在示例中使用的正则表达式仅允许空格和 ~ (英文字母、数字和一些特殊字符)之间的字符以及 Windows 和 Unix 格式的换行符。我想删除其他所有内容。

标签: c#.netregex

解决方案


您的正则表达式需要匹配您要删除的字符才能使 regex.replace 起作用。因为您的模式与任何内容都不匹配,所以没有任何内容被替换。目前尚不清楚您要删除的具体内容,但这里有一个示例:

该模式(\\t)|(Ö)匹配制表符和 Ö 字符,所以

    string sample = "ab\tcefÖ";
    string pattern = "(\\t)|(Ö)";
    string result = Regex.Replace(sample, pattern, "");
    System.Console.WriteLine("SAMPLE : " + sample);
    System.Console.WriteLine("RESULT : " + result);

结果是

SAMPLE: ab      cefÖ
RESULT: abcef

如果您准确解释要删除的所有内容,我可以为您指出更具代表性的正则表达式模式。例如,要删除空格和 ~ 之间的所有字符以及制表符,您可以使用[^ -~]|(\\t).


推荐阅读