2

我有一个包含 csv 值的字符串变量,如下所示:

string str = "105, c#, vb, 345, 53, sql51";

所以现在我想在不使用循环的情况下只获取列表数组中的字母数字项。

要求的结果:

string result = "c#, vb, sql51";

或在列表中或在数组中...

4

4 回答 4

5
string str = "105, c#, vb, 345, 53, sql51";
var separator = ", ";
int dummy;

var parts = str.Split(new[]{separator}, StringSplitOptions.RemoveEmptyEntries)
               .Where(s => !int.TryParse(s, out dummy));

string result = string.Join(separator, parts);

Console.WriteLine(result);

印刷:

c#, vb, sql51
于 2013-06-05T09:32:31.230 回答
4

使用方法拆分Split,使用 LINQ 表达式进行过滤,然后在结果上调用ToArrayorToList以生成过滤后的数组:

var res = str
    .Split(new[] {',', ' '})
    .Where(s => s.Any(c => !Char.IsDigit(c)))
    .ToList();

ideone 上的演示

于 2013-06-05T09:31:33.460 回答
0
"105, c#, vb, 345, 53, sql51".Split(",")
       .Where(item => new Regex("[#A-Za-z0-9]").IsMatch(item))
           .Select(item=> item.Trim())
                 .ToList();

注意:不知道为什么 OP 想要过滤掉数字——数字是字母数字的。

于 2013-06-05T09:36:10.887 回答
0

就像是:

var str = "test,test,tes,123,5";
var result = string.Join(",", str.Split(',').Where(s => !s.All(t => Char.IsNumber(t))));
result.Dump();
于 2013-06-05T09:36:48.300 回答