从字符串中删除以SOT开头并结束EOT的子字符串

时间:2015-01-29 13:20:53

标签: c# regex string

我有一个从内存中读取某些字符串的程序。这些字符串在很大程度上包含可识别的字符。然而,在字符串中的随机点,出现“怪异”字符。我不认识的人物。通过访问允许我粘贴Unicode字符的网站来查看它们是什么,我发现选择了“怪异”的字符是这些:

  • \ x {1} SOH,“标题的开头”,ctrl-a
  • \ x {2} SOT,“文字开头”
  • \ x {3} EOT,“文字结束”
  • \ x {BEL} BEL,bell,ctrl-g
  • \ x {13} dc3,设备控制三,ctrl-s
  • \ x {11} dc1,设备控制一,ctrl-q
  • \ x {14} dc4,设备控制四,ctrl-t
  • \ x {1A} sub,substitute,ctrl-z
  • \ x {6}确认,确认,ctrl-f

我想解析我的字符串以删除这些字符。通过查看字符串,我发现的是,所有不需要的字符总是分别被SOT和EOT包围。

因此,我认为我的问题是:如何从字符串中删除以SOT开头并以EOT结尾的所有子串?


编辑:尝试解决方案

使用来自@RagingCain的想法我做了以下方法:

    private static string RemoveInvalidCharacters(string input)
    {
        while (true)
        {
            var start = input.IndexOf('\u0002');
            var end = input.IndexOf('\u0003', start);

            if (start == -1 || end == -1) break;

            Console.WriteLine(@"Start: " + start + @". End: " + end);
            var diff = end - start;
            input = input.Remove(start, diff);
        }
        return input;
    }

这样做,再次感谢。

1 个答案:

答案 0 :(得分:3)

正则表达式将是您的解决方案,应该可以正常工作。您可以将这些字符分配给模式,然后您可以使用子方法 匹配 ,甚至只需 替换 他们有空白" ",或者只使用""

将它们从字符串中一起剪切掉

Regex.Replace:https://msdn.microsoft.com/en-us/library/xwewhkd1(v=vs.110).aspx

Regex.Match:https://msdn.microsoft.com/en-us/library/bk1x0726(v=vs.110).aspx

正则表达式示例:

 public static void Main()
 {
   string input = "This is   text with   far  too   much   " + 
                  "whitespace.";
   string pattern = "\\s+";
   string replacement = " ";
   Regex rgx = new Regex(pattern);
   string result = rgx.Replace(input, replacement);

   Console.WriteLine("Original String: {0}", input);
   Console.WriteLine("Replacement String: {0}", result);                             
 }

我知道虽然无法“看到"它们应该由Unicode本身将它们分配给Char变量,将它们添加到模式中以进行替换。

Char变量:https://msdn.microsoft.com/en-us/library/x9h8tsay.aspx

文本开头的Unicode: http://www.fileformat.info/info/unicode/char/0002/index.htm

Unicode结尾文字: http://www.fileformat.info/info/unicode/char/0003/index.htm

要应用于您的解决方案: 字符串是否包含SOT,EOT。 如果为true,则删除整个字符串/子字符串/ SOT或EOT。

将原始字符串拆分为字符串[]可能更容易,然后逐行进行...很难通过字符串解析它而不知道它看起来像什么,所以希望我提供的东西有助于^。 ^