Minecraft颜色代码解析器

时间:2015-03-24 19:41:44

标签: c# winforms richtextbox minecraft string-parsing

我正在尝试制作一个Minecraft颜色代码解析器。我从文本框中获取原始文本,并在富文本框中显示生成的文本。 原始文本看起来像这样:

  

&安培; 4RED

此处,&4表示之后的文字应为红色。

  

ABC&安培; 4RED&安培; fWhite

此文本应为默认颜色(黑色)中的abc,红色中的“红色”,白色中的“白色”。

那么如何解析文本以将文本分成“abc”,“& 4Red”和“& fWhite”?

1 个答案:

答案 0 :(得分:3)

您必须了解

  1. 基本C#
  2. 正则表达式
  3. LINQ
  4. 匿名类型
  5. 代表
  6. 但这可以解决问题:

            var txt = "abc&4Red&fWhite";
    
            // Add color code Black for first item if no color code is specified
            if (!txt.StartsWith("&"))
                txt = "&0" + txt;
    
            // Create a substrings list by splitting the text with a regex separator and
            // keep the separators in the list (e.g. ["&0", "abc", "&4", "Red", "&f", "White"])
            string pattern = "(&.)";
            var substrings = Regex.Split(txt, pattern).Where(i => !string.IsNullOrEmpty(i)).ToList();
    
            // Create 2 lists, one for texts and one for color codes
            var colorCodes = substrings.Where(i => i.StartsWith("&")).ToList();
            var textParts = substrings.Where(i => !i.StartsWith("&")).ToList();
    
            // Combine the 2 intermediary list into one final result
            var result = textParts.Select((item, index) => new { Text = item, ColorCode = colorCodes[index] }).ToList();