separar puedo nombres nombre mis los funciones cómo contactos con como apellidos c# string string-parsing

c# - puedo - separar nombres y apellidos en excel 2010 con formulas



¿Cómo separar la cadena de nombre completo en la cadena de nombre y apellido? (12)

¿Es esto tan simple como llamar a string.Split() , pasando un solo espacio como el carácter dividido? ¿O hay algo más complicado aquí? (Si es el último, por favor actualice su pregunta con más información).

Necesito ayuda con esto, tengo una cadena de nombre completo y lo que debo hacer es separar y usar esta cadena de nombre completo como nombre y apellido por separado


Aquí hay un fragmento de código c # que utilizo en mis proyectos. Devuelve la última palabra como apellido y el resto como nombre.

Fiddle

Salida:

Mary Isobel Catherine O’Brien ------------------------- Name : Mary Isobel Catherine , Surname : O’Brien

PS No hay segundo nombre, lo siento.

public static string[] SplitFullNameIntoNameAndSurname(string pFullName) { string[] NameSurname = new string[2]; string[] NameSurnameTemp = pFullName.Split('' ''); for (int i = 0; i < NameSurnameTemp.Length; i++) { if (i < NameSurnameTemp.Length - 1) { if (!string.IsNullOrEmpty(NameSurname[0])) NameSurname[0] += " " + NameSurnameTemp[i]; else NameSurname[0] += NameSurnameTemp[i]; } else NameSurname[1] = NameSurnameTemp[i]; } return NameSurname; }


Entonces, si toma el Primer espacio como Nombre y el resto como Apellido, esto nos dará

Person myPerson = new Person(); Misc tidyup = new Misc(); string[] result = tidyup.SplitFullName(tb1.Text); foreach (string s in result) { Console.WriteLine(s); if (result.First() == s) { myPerson.FirstName = s; } else { myPerson.LastName += s + " "; Console.WriteLine(s); Console.WriteLine(myPerson.LastName); } } public string[] SplitFullName(string myName) { string[] names = myName.Split('' ''); //string firstName = names[0]; //string lastName = names[1]; return names; }


Esta solución funcionará para las personas que tienen un apellido que tiene más de una palabra. Trate la primera palabra como el primer nombre y deje todo lo demás como el apellido.

public static string getLastNameCommaFirstName(String fullName) { List<string> names = fullName.Split('' '').ToList(); string firstName = names.First(); names.RemoveAt(0); return String.Join(" ", names.ToArray()) + ", " + firstName; }

Por ejemplo, pasar a Brian De Palma a la función anterior devolverá "De Palma, Brian"

getLastNameFirst("Brian De Palma"); //returns "De Palma, Brian"


Esto funcionará si está seguro de que tiene un nombre y un apellido.

string fullName = "Adrian Rules"; var names = fullName.Split('' ''); string firstName = names[0]; string lastName = names[1];

Asegúrese de verificar la longitud de los names .

names.Length == 0 //will not happen, even for empty string names.Length == 1 //only first name provided (or blank) names.Length == 2 //first and last names provided names.Length > 2 //first item is the first name. last item is the last name. Everything else are middle names

Actualizar

Por supuesto, esta es una visión bastante simplificada del problema. El objetivo de mi respuesta es explicar cómo funciona string.Split() . Sin embargo, debe tener en cuenta que algunos apellidos son nombres compuestos, como "Luis da Silva", como lo anotó @AlbertEin.

Esto está lejos de ser un problema simple de resolver. Algunas preposiciones (en francés, español, portugués, etc.) son parte del apellido. Es por eso que @John Saunders preguntó "¿qué idioma?". John también notó que los prefijos (Sr., Sra.) Y los sufijos (Jr., III, MD) podrían interferir.


Hay varias implementaciones de análisis / división de nombres en nuget. Si se sumerge en el repositorio de NameParserSharp, también puede combinar dos clases parciales y copiar y pegar en su propia biblioteca.

NameParserSharp

Más en Nuget



Puede usar esta versión (MSDN) del método Split como sigue:

var testcase = "John Doe"; var split = testcase.Split(new char[] { '' '' }, 2);

En este caso, split[0] será John y split[1] será Deo . otro ejemplo:

var testcase = "John Wesley Doe"; var split = testcase.Split(new char[] { '' '' }, 2);

En este caso, split[0] será John y split[1] será Wesley Doe .

Tenga en cuenta que la longitud de la split nunca será más de 2

Así que con el siguiente código puede obtener un FirstName y un LastName muy bien:

var firstName = ""; var lastName = ""; var split = testcase.Split(new char[] { '' '' }, 2); if (split.Length == 1) { firstName = ""; lastName = split[0]; } else { firstName = split[0]; lastName = split[1]; }

Espero que esta respuesta agregue algo útil a esta página.


Puedes intentar analizarlo usando espacios pero no va a funcionar, Ejemplo:

var fullName = "Juan Perez"; var name = fullName.Substring(0, fullName.IndexOf(" ")); var lastName = fullName.Substring(fullName.IndexOf(" ") + 1);

Pero eso fallaría con una tonelada de comentarios del usuario, ¿y si tiene dos nombres? "Juan Pablo Pérez".

Los nombres son cosas complicadas, por lo tanto, no es posible saber siempre qué parte es el nombre y el apellido de una cadena dada.

EDITAR

No debe usar el método de string.Split para extraer el apellido, algunos apellidos se componen de dos o más palabras, como ejemplo, el apellido de un amigo mío es "Ponce de León".


Recomendaría usar un Regex para definir rigurosamente cómo se verán sus nombres y apellidos.


Tratar:

string fullName = "The mask lol"; string[] names = fullName.Split('' ''); string name = names.First(); string lasName = names.Last();


para los casos de uso básicos es fácil dividirlo en '''' o '', sin embargo, debido a la variedad de nombres con diferentes cosas en ellos, esto no siempre va a funcionar.