2015-10-15 91 views
-2

我有以下字符串:C#切出多個子字符串開頭的字符

string nameString = "Sean Pen/212321\n Chris Brown/578,4\n Sandy Sanders/879757" 

我需要提取的名字,所以我有以下結果:

Sean Pen 
Chris Brown 
Sandy Sanders 

我已經嘗試使用子字符串方法,如:

nameString = nameString(0,nameString.LastIndexOf("/")+1); 

它刪除最後一個號碼,但我怎麼能提取後面的每個數字cter'/'仍然保留名稱?

+1

您在找'正則表達式' – kevintjuh93

+0

同樣最後一個索引沒有意義。對我來說,你似乎只需要最後一個索引。這是'長度-1' – kevintjuh93

回答

0

的字符串,你不需要正則表達式,String.Split和一點點的LINQ是不夠的:

string[] names = nameString.Split(new[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries) 
    .Select(s => s.Split('/')[0].Trim()) 
    .ToArray(); 

因此,首先由換行符分割以獲得三個令牌,然後將其拆分爲/以僅獲取包含該名稱的第一個。最後用String.Trim刪除前導或尾隨空格。

0

你可以使用正則表達式,如果你想,或者你可以做以下使用普通的.NET字符串函數:

static void Main(string[] args) 
{ 
    string nameString = "Sean Pen/212321\n Chris Brown/578,4\n Sandy Sanders/879757"; 

    var names = ExtractNames(nameString); 

    foreach (var name in names) 
    { 
     Console.WriteLine("-" + name + "-"); 
    } 
} 

static List<string> ExtractNames(string input) 
{ 
    return input.Split('\n').Select(RemoveNumbers).ToList(); 
} 

static string RemoveNumbers(string input) 
{ 
    return new string(input.Where(c => char.IsLetter(c) || char.IsSeparator(c)).ToArray()).Trim(); 
} 

這將字符串分割成每個\ n字符線,然後將其刪除所有不是字母或分隔符的字符。最後,將修剪的字符串,以消除任何空白

+0

正則表達式對於他所詢問的約 – MikeT

+0

同意是矯枉過正。對於大多數任務,正則表達式過度消耗:-) –

0

我想你的,因爲你要使用的數據的東西使用Split函數

如果拆分的「\ n」和「 嘗試打破這件事/」你將有一個數組中的第一個元素是名字,第二個是數量

foreach(var row in nameString.Split('\n','\r'))//covers line feed and carriage return 
{ 
    data = row.Split('/')); 
    name = data[0]; 
    number = data[1]; 
} 
+0

您可能想要執行'\ n'和'/'。刪除空格。 – kevintjuh93

+1

其實我只是修剪它們,因爲我假設這個字符串是手動輸入,因爲沒有計算機化的過程將需要輸出格式 – MikeT

+0

公平不夠;) – kevintjuh93

-1

您可以使用字符串函數

 string nameString = "Sean Pen/212321\n Chris Brown/578,4\n Sandy Sanders/879757"; 

     string sean = nameString.Substring(0, 8); 
     string chris = nameString.Substring(19, 11); 
     string sandy = nameString.Substring(40, 14); 

     Console.WriteLine(sean); 
     Console.WriteLine(chris); 
     Console.WriteLine(sandy); 
+0

這種靜態的方法無濟於事,因爲名字改變了 – Douy789

0

的結合物或正則表達式和字符串函數應該給你你需要什麼。

var names = Regex.Replace("Sean Pen/212321\n Chris Brown/578,4\n Sandy Sanders/879757", @"([^A-Za-z ])\w+", string.Empty).Split('/'); 

foreach (var name in names) 
    Console.WriteLine(name.Trim()); 
相關問題