一次读取一个字符串,3x3个字符

Veg*_*gar 12 c# string split

想象一下这个字符串:

    _  _     _  _  _  _  _
  | _| _||_||_ |_   ||_||_|
  ||_  _|  | _||_|  ||_| _| 
Run Code Online (Sandbox Code Playgroud)

分割这个字符串最简单/最好的方法是什么,这样每个数字都可以自己处理?

我在想类似的东西

public string[] SplitIntoNumbers(string input)
Run Code Online (Sandbox Code Playgroud)

结果会是什么样的

["     |  |", " _  _||_ ", " _  _| _|", ...]
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

编辑
因为想要更多信息 - 问题来自于BankOCR -kata over CodingDojo.我意识到有多种方法可以"完成工作" - 解决方案,但我觉得必须有一种更''花哨'的解决方法.一些类似于clojure的东西.

Cra*_*igW 1

我将使用正则表达式来构建具有与此类似的模式的匹配列表

(.{3})
Run Code Online (Sandbox Code Playgroud)

这会将输入分解为 3x1 匹配的块,并根据您拥有的匹配数量来确定数字。例如

    _  _     _  _  _  _  _
  | _| _||_||_ |_   ||_||_|
  ||_  _|  | _||_|  ||_| _| 
Run Code Online (Sandbox Code Playgroud)

将生成 27 个 3x1 段的匹配,并且由于每个数字有 3 行高,因此您可以只取 27 / 3 = 9 个单独的数字。然后,您只需循环遍历正则表达式匹配并将它们组合到您想要的输出中。

void Main()
{
    string input = "    _  _     _  _  _  _  _ \r\n  | _| _||_||_ |_   ||_||_|\r\n  ||_  _|  | _||_|  ||_| _|";

    string[] result = SplitIntoNumbers(input);
}

public string[] SplitIntoNumbers(string input)
{
    List<string> results = new List<string>();

    Regex rx = new Regex("(.{3})");
    MatchCollection matches = rx.Matches(input);
    int totalNumbers = matches.Count / 3;

    for(int i = 0; i < totalNumbers; i++)
    {
        string s = string.Concat(matches[i].Value, matches[i + totalNumbers].Value, matches[i + (totalNumbers * 2)].Value);

        results.Add(s);
    }

    return results.ToArray();
}
Run Code Online (Sandbox Code Playgroud)