c# - 从字符串中删除以 SOT 开头并以 EOT 结尾的子字符串

标签 c# regex string

我有一个程序可以从内存中读取某些字符串。这些字符串大部分包含可识别的字符。然而,在字符串中的随机点,会出现“奇怪”的字符。我不认识的字符。通过访问允许我粘贴 Unicode 字符的站点以查看它们是什么,我发现选择的“奇怪”字符如下:

  • \x{1} SOH, "标题开始", ctrl-a
  • \x{2} SOT,“文本开始”
  • \x{3} EOT,“文本结束”
  • \x{7} 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} ack, acknowledge, 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;
    }

它成功了,再次感谢。

最佳答案

Regex 将是您的解决方案,应该可以正常工作。您可以将这些字符分配给 Pattern,您可以使用子方法 Match 或者甚至只是 Replace 用空格 "",或者使用 ""将它们一起从字符串中删除。

正则表达式替换:https://msdn.microsoft.com/en-us/library/xwewhkd1(v=vs.110).aspx

正则表达式匹配: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 变量,将它们添加到模式中以进行替换。

字符变量: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。 如果为真,则删除整个字符串/子字符串/SOT 或 EOT。

将原始字符串拆分为字符串[],然后逐行处理可能更容易...在不知道字符串是什么样子的情况下很难解析你的字符串,所以希望我提供了一些有用的东西 ^.^

关于c# - 从字符串中删除以 SOT 开头并以 EOT 结尾的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28215808/

相关文章:

c# - 使用 async/await 设置 Thread.CurrentPrincipal

javascript - 如何在 JavaScript 中使用正则表达式验证电子邮件地址?

.net - 使用正则表达式查找不在 html 标记中的特定字符串

正则表达式如何匹配可选字符

c - 在 strtok 中如何使用 char* 作为参数

C# DateTime求值问题

c# - 表达式树依赖分析器

c# - 将一些 TSQL 转换为 LINQ to Entities 时出现问题

php - preg_match_all 不返回所有子模式

regex - 在 Perl 中,如何打印从文件中读取的行,并删除了可选的前导空格?