将封装为int的字符串解析为包含要忽略的其他数字的数组

本文关键字:其他 数字 数组 int 封装 字符串 包含 | 更新日期: 2023-09-27 17:51:22

在我的编码过程中,我遇到了一个问题,涉及解析像这样的字符串:

{15}有194个红气球,{26}有23个贴纸,{40}有12个杰克,....

我的代码涉及将句子和数字拉到两个单独的数组中。我已经解决了使用*.Remove(0, 5)将句子解析成自己的数组的问题,以消除第一部分,该部分的问题是,我必须确保文件总是被写入一个标准,其中涉及{##},但它并不像我想的那样优雅,因为有时数字将是{3},我将被迫使它成为{3}。

因为字符串也可能包含其他数字,所以我不能简单地先解析出整数。

int?[] array = y.Split(',')
            .Select(z =>
            {
                int value;
                return int.TryParse(z, out value) ? value : (int?)null;
            })
            .ToArray();

那么无论如何回到手头的问题,我需要能够将"{##}"解析成一个数组,每个数组都有自己的元素

将封装为int的字符串解析为包含要忽略的其他数字的数组

这里有一种方法可以使用正向查找/向后查找:

string s = "{15} there are 194 red balloons, {26} there are 23 stickers, {40} there are 12 jacks";
// Match all digits preceded by "{" and followed by "}"
int[] matches = Regex.Matches(s, @"(?<={)'d+(?=})")
    .Cast<Match>()
    .Select(m => int.Parse(m.Value))
    .ToArray(); 
// Yields [15, 26, 40]