3

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

{15} 有 194 个红气球,{26} 有 23 个贴纸,{40} 有 12 个千斤顶,......

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

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

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

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

4

1 回答 1

2

这是使用积极的前瞻/后视来做到这一点的一种方法:

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]
于 2013-01-12T02:58:12.923 回答