C# - 如何拆分字符串并过滤其中的一些条目

时间:2013-09-17 07:59:05

标签: c# linq split

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

谢谢, 利兹

6 个答案:

答案 0 :(得分: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();

答案 1 :(得分:3)

var results = "1, a, 2, a, 3, a".Split(',')
                                .Select(x => x.Trim())
                                .Where(x => x != "a")
                                .ToArray();

答案 2 :(得分: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]

(基于你的澄清,这超出了你实际要求的范围 - 它会起作用,但它确实比实际要求更多)

答案 3 :(得分:1)

你可以使用

     int tmp;
     string[] arr = str.Split(',').
                        Where(x=>int.TryParse(x, out tmp)).
                        ToArray();

答案 4 :(得分: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

答案 5 :(得分: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;
}