2013-10-01 4 views
-2

Я пытаюсь научиться разделить строки. У меня есть строка, например, Adams, John - 22.6.2001. Каков самый простой способ разделить каждую из следующих частей информации на конкретные строки? Мне нужно имя, фамилия и дата.Разбиение строки на 3 части

Это решение, которое я попробовал себя:

string st = "Adams, John - 22.6.2001" 
st = st.Trim(); // To replace all possible white spaces? But I don't know how can I cut each of details into string. 
+1

Это не обрезка, это синтаксический анализ. Синхронизирующие имена необычайно трудны, если не невозможны, учитывая, что у некоторых людей есть имена с несколькими именами, как имена первых, средних или фамилий, поэтому вы не можете сказать в сложных случаях, что это такое. – Servy

+1

Как насчет названия из 3-х слов? –

+0

И не забывайте те языки, которые ставят фамилию перед данным именем! – Skizz

ответ

1

Вы можете сделать это с помощью String.split(), чтобы разбить части строки в массив строк. Trim() используется для удаления белого пространства из начала и конца строки, поэтому это можно использовать для упорядочивания полученных строк.

string st = "Adams, John - 22.6.2001"; 

// first split on dash, to seperate name and date 
string[] partsArray = st.Split('-'); 

// now split first part to get first and surname (trim surrounding whitespace) 
string[] nameArray = partsArray[0].Split(','); 
string firstName = nameArray[1].Trim(); 
string lastName = nameArray[0].Trim(); 

// get date from other part (again trim whitespace) 
string dateAsString = partsArray[1].Trim(); 

Разбор текста - сложная тема, но я думаю, что вопрос просто искал введение. Есть много краевых случаев и проблем, которые вам нужно добавить в синтаксический анализатор, чтобы приблизиться к 100% результатам для разных форматов имен и дат. Если вы импортировали данные наподобие этого, вы должны использовать CSV-файл или аналогичный для разбивки частей перед импортом.

4

что это самый простой способ отделки каждого из этих данных в конкретных строк: имя, фамилия, дата?

Похоже, вы хотите раздельных жал на основе , и пространстве.

string[] splitArray = st.Split(new string[] { ",", " "}, StringSplitOptions.RemoveEmptyEntries); 

EDIT:

Что касается разбора имен, то, вы должны определить, какие-то правила, которые, как ваша строка будет иметь имена. Например, ваша строка может иметь несколько имен: First, Last, Middle, разделенных запятыми, в этом случае вышеуказанный оператор не даст вам нужного результата. Вы должны определить некоторые правила, чтобы ваша строка ввода была последовательной, и на основе этого вы можете использовать string.Split для получения значений.

+2

Это работает для некоторых простых примеров, но не более сложных. Должна ли «Мэри Энн Смит» быть разбита на Мэри Энн »и« Смит »или« Мэри »и« Энн Смит »? – Servy

+0

@ Серви, я не могу это исправить. Если примеров больше, я думаю было бы лучше, но на данный момент это должно сработать. – Habib

+0

@Habib Он спрашивает, как правильно разобрать строку с именем на имя и фамилию. Он ничего не сказал о том, чтобы ограничить его именами только с одним именем работы и фамилии, или что у него есть только один пример для работы. Проблема заключается в том, как анализировать имена, если не указаны другие ограничения. – Servy

Смежные вопросы