我有一個包含CSV值這樣一個字符串變量:拆分與條件的字符串
string str = "105, c#, vb, 345, 53, sql51";
所以現在我想用循環得到的只有字母數字的項目在列表或陣列沒有。
所需的結果:
string result = "c#, vb, sql51";
或者在列表中或者在陣列...
我有一個包含CSV值這樣一個字符串變量:拆分與條件的字符串
string str = "105, c#, vb, 345, 53, sql51";
所以現在我想用循環得到的只有字母數字的項目在列表或陣列沒有。
所需的結果:
string result = "c#, vb, sql51";
或者在列表中或者在陣列...
拆分該結果使用Split
方法,過濾器與LINQ表達,並調用ToArray
或ToList
以產生濾波陣列:
var res = str
.Split(new[] {',', ' '})
.Where(s => s.Any(c => !Char.IsDigit(c)))
.ToList();
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
你的解決方案是錯誤的。 「C#」不是字母數字,因爲「#」字符在「105」時不允許。 –
多數民衆贊成在..很好。謝謝。 – Samina
@dasblinkenlight如果問題不清楚,我們如何提供答案:)而且,「105.0」又如何呢?這是一個字符串或數字(不是整數,而是一個數字)?它符合OP的「字母數字」概念。 –
"105, c#, vb, 345, 53, sql51".Split(",")
.Where(item => new Regex("[#A-Za-z0-9]").IsMatch(item))
.Select(item=> item.Trim())
.ToList();
注:不知道爲什麼OP要過濾out--號碼數字是字母數字。
請考慮只有數字的字符串。 –
您忘了支持'#'(以及可能存在的所有其他非數字字符) –
@MthetheWWatson感謝 - 仍然對OP期望得到的結果感到困惑。假設#是可以接受的,是不是所有列表中的數字都是字母數字? –
是這樣的:
var str = "test,test,tes,123,5";
var result = string.Join(",", str.Split(',').Where(s => !s.All(t => Char.IsNumber(t))));
result.Dump();
我曾嘗試使用這種分裂: 串[] strArray = str.split( ''); 然後循環一個一個地檢查數字。 – Samina
你是什麼意思'不使用循環'? – Skizz
'105' *是*字母數字......您的意思是「只獲取不是數字的子串」? –