1

拆分以下字符串的最简单方法是什么:“1、a、2、a、3、a”,然后过滤所有包含“a”的条目以获得结果:[1,2,3]?

谢谢,丽兹

4

6 回答 6

5
string[] result = "1, a, 2, a, 3, a".Split(',')
    .Select(s => s.Trim())
    .Where(s => s != "a")
    .ToArray();

如果要比较不区分大小写:

string[] result = "1, a, 2, a, 3, a".Split(',')
    .Select(s => s.Trim())
    .Where(s => !"a".Equals(s, StringComparison.OrdinalIgnoreCase))
    .ToArray();
于 2013-09-17T08:00:40.410 回答
3
var results = "1, a, 2, a, 3, a".Split(',')
                                .Select(x => x.Trim())
                                .Where(x => x != "a")
                                .ToArray();
于 2013-09-17T08:00:53.187 回答
2

一个简单的正则表达式结合 LINQ 可以粗略但有效地管理这个:

    public static int[] NumberList(string source, string filter)
    {

        var split = Regex.Split(source, "(\\d+,\\s*\\w)");
        var list = (from s in split where s.EndsWith(filter)
                       select int.Parse( s.Split(',')[0])).ToArray();
        return list;
    }

第一个Regex.split将其拆分为一个包含数字、逗号和字母的数组;然后,LINQ 查询仅从数组中提取以过滤器字母结尾的那些项目,并将逗号之前的部分作为整数数组返回。

示例调用:

     var result = NumberList("1, a, 2, b, 3, a, 4, c", "a");

返回:

     [1, 3]

(根据您的澄清,这超出了您实际要求的范围 - 它会起作用,但它的作用超出了实际需要)

于 2013-09-17T08:07:47.823 回答
1

您可以使用

     int tmp;
     string[] arr = str.Split(',').
                        Where(x=>int.TryParse(x, out tmp)).
                        ToArray();
于 2013-09-17T08:06:46.843 回答
0

正则表达式与 Linq

string[] result = "1, a, 2, a, b , 3, a".Split(',')
    .Select(s => s.Trim())
    .Where(s => Regex.IsMatch(s, @"^\d+$"))
    .ToArray();

结果

1、2、3

于 2013-09-17T08:19:15.083 回答
0

你可以使用这个:

var arr = "1, a, 2, b, 3, a, 4, c"
    .Split(',')
    .Select(x => Parse(x))
    .Where(x => x != null)
    .Select(x => x.Value)
    .ToArray();

Parse方法:

static int? Parse(string value)
{
    int result;

    if (int.TryParse(value, out result))
    {
        return result;
    }

    return null;
}
于 2013-09-17T09:19:22.667 回答