2015-10-15 94 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()); 
相关问题