我有一个包含 csv 值的字符串变量,如下所示:
string str = "105, c#, vb, 345, 53, sql51";
所以现在我想在不使用循环的情况下只获取列表或数组中的字母数字项。
要求的结果:
string result = "c#, vb, sql51";
或在列表中或在数组中...
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
使用方法拆分Split
,使用 LINQ 表达式进行过滤,然后在结果上调用ToArray
orToList
以生成过滤后的数组:
var res = str
.Split(new[] {',', ' '})
.Where(s => s.Any(c => !Char.IsDigit(c)))
.ToList();
"105, c#, vb, 345, 53, sql51".Split(",")
.Where(item => new Regex("[#A-Za-z0-9]").IsMatch(item))
.Select(item=> item.Trim())
.ToList();
注意:不知道为什么 OP 想要过滤掉数字——数字是字母数字的。
就像是:
var str = "test,test,tes,123,5";
var result = string.Join(",", str.Split(',').Where(s => !s.All(t => Char.IsNumber(t))));
result.Dump();