2015-10-15 4 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); 

, который удаляет последнее число, но как я могу извлечь каждое число после chara cter '/' и сохранить имена?

+1

Вы ищете 'Regex' – kevintjuh93

+0

Также последний индекс не имеет смысла. Мне кажется, вам нужен только последний индекс. Который 'Length-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

Вы можете использовать Regex, если вы хотите, или вы могли бы сделать следующее с помощью регулярных .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(); 
} 

Это будет разделить строку на строки для каждого \ п характер, а затем удаляет все символы, которые не являются буквами или разделителями. Наконец он будет обрезать строку, чтобы удалить любой пробел

+0

Regex - это излишество по тому, что он задал о – MikeT

+0

Согласен. Regexes av overkill для большинства задач :-) –

0

я полагаю, ваш ломать это, потому что вы хотите использовать эти данные для чего-то Попробуйте использовать Split функцию

, если вы разделите на «\ п» и " /»вы будете иметь массив были первым элементом является имя и вторая является строкой из числа

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());