2013-06-05 90 views
2

我有一個包含CSV值這樣一個字符串變量:拆分與條件的字符串

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

所以現在我想用循環得到的只有字母數字的項目在列表陣列沒有

所需的結果:

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

或者在列表中或者在陣列...

+0

我曾嘗試使用這種分裂: 串[] strArray = str.split( ''); 然後循環一個一個地檢查數字。 – Samina

+0

你是什麼意思'不使用循環'? – Skizz

+0

'105' *是*字母數字......您的意思是「只獲取不是數字的子串」? –

回答

4

拆分該結果使用Split方法,過濾器與LINQ表達,並調用ToArrayToList以產生濾波陣列:

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

Demo on ideone

+4

Upvoted這一個,因爲這鼓勵提問者做他的功課,而不是咀嚼他。編輯:並撤消。 – Joetjah

+0

怎麼樣?你可以用例子來解釋嗎? – Samina

+0

是的,結果樣本是一個字符串,但其他東西也可以。 –

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 
+0

你的解決方案是錯誤的。 「C#」不是字母數字,因爲「#」字符在「105」時不允許。 –

+0

多數民衆贊成在..很好。謝謝。 – Samina

+0

@dasblinkenlight如果問題不清楚,我們如何提供答案:)而且,「105.0」又如何呢?這是一個字符串或數字(不是整數,而是一個數字)?它符合OP的「字母數字」概念。 –

0
"105, c#, vb, 345, 53, sql51".Split(",") 
     .Where(item => new Regex("[#A-Za-z0-9]").IsMatch(item)) 
      .Select(item=> item.Trim()) 
       .ToList(); 

注:不知道爲什麼OP要過濾out--號碼數字是字母數字。

+0

請考慮只有數字的字符串。 –

+0

您忘了支持'#'(以及可能存在的所有其他非數字字符) –

+0

@MthetheWWatson感謝 - 仍然對OP期望得到的結果感到困惑。假設#是可以接受的,是不是所有列表中的數字都是字母數字? –

0

是這樣的:

var str = "test,test,tes,123,5"; 
var result = string.Join(",", str.Split(',').Where(s => !s.All(t => Char.IsNumber(t)))); 
result.Dump();