我有以下字符串:
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);
删除最后一个号码,但如何在字符后提取每个号码' /'并保留名称?
答案 0 :(得分: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字符的行,然后删除所有不是字母或分隔符的字符。最后,它将修剪字符串以删除任何空格
答案 1 :(得分:0)
我假设你打破了这个,因为你想要使用数据 尝试使用分割功能
如果你分开&#34; \ n&#34;和&#34; /&#34;你将有一个数组,第一个元素是名称,第二个是数字的字符串
foreach(var row in nameString.Split('\n','\r'))//covers line feed and carriage return
{
data = row.Split('/'));
name = data[0];
number = data[1];
}
答案 2 :(得分:0)
你不需要正则表达式,String.Split
和一点点LINQ就足够了:
string[] names = nameString.Split(new[] { "\r\n", "\n" }, StringSplitOptions.RemoveEmptyEntries)
.Select(s => s.Split('/')[0].Trim())
.ToArray();
首先用换行符分割得到三个标记,然后用/
拆分它们,得到只包含名字的第一个标记。最后使用String.Trim
删除前导或尾随空格。
答案 3 :(得分: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());
答案 4 :(得分:-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);