Minecraft 颜色代码解析器
Minecraft Color code parser
我正在尝试制作一个 minecraft 颜色代码解析器。我从文本框中获取原始文本,并将生成的文本显示在富文本框中。
原始文本看起来像这样:
&4Red
这里,&4
表示后面的文字应该是红色。
abc&4Red&fWhite
此文本在默认颜色(黑色)下应该看起来像 abc,在红色下 "Red",在白色下 "White"。
那么如何解析文本以将文本分隔为 "abc"、“&4Red”和“&fWhite”?
您将必须了解
- 基础 C#
- 正则表达式
- LINQ
- 匿名类型
- 代表
但这确实有效:
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();
我正在尝试制作一个 minecraft 颜色代码解析器。我从文本框中获取原始文本,并将生成的文本显示在富文本框中。 原始文本看起来像这样:
&4Red
这里,&4
表示后面的文字应该是红色。
abc&4Red&fWhite
此文本在默认颜色(黑色)下应该看起来像 abc,在红色下 "Red",在白色下 "White"。
那么如何解析文本以将文本分隔为 "abc"、“&4Red”和“&fWhite”?
您将必须了解
- 基础 C#
- 正则表达式
- LINQ
- 匿名类型
- 代表
但这确实有效:
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();