multiple into delimiters python split

into - python split string parameters



Dividir el nombre de una persona en nombre y apellido (14)

Me gusta esto:

print name.split()[-1]

Ok, entonces básicamente estoy preguntando sobre su nombre. Quiero que sea una entrada en vez de Nombre y Apellidos.

¿Hay alguna forma de dividir este nombre? y tomando solo la última palabra de la "Oración", por ejemplo

name = "Thomas Winter" print name.split()

y lo que se produciría es solo "Invierno"


Descubrirá que su problema clave con este enfoque no es técnico, sino humano: diferentes personas escriben sus nombres de diferentes maneras.

De hecho, la terminología de "nombre de pila" y "apellido" es en sí misma defectuosa.

Mientras que muchas familias combinadas usan un apellido con guiones, como Smith-Jones, hay algunos que usan ambos nombres por separado, "Smith Jones", donde ambos nombres son el apellido.

Muchos apellidos europeos tienen varias partes, como "de Vere" y "van den Neiulaar". A veces estos extras tienen antecedentes familiares importantes, por ejemplo, un prefijo otorgado por un rey hace cientos de años.

Problema secundario: las he puesto en mayúscula correctamente para las personas a las que me refiero: "de" y "van den" no reciben letras para algunas familias, pero sí para otras.

Por el contrario, muchas culturas asiáticas ponen el apellido primero, porque la familia se considera más importante que el individuo.

El último punto: algunas personas le dan mucha importancia a ser "Junior", "Senior" o "III", y su código no debería tratarlas como su apellido.

También señalando que hay un buen número de personas que usan un nombre que no es el otorgado por sus padres, utilicé el siguiente esquema con cierto éxito:

Nombre completo (como normalmente se escribe para abordar el correo); Apellido; Conocido como (el nombre comúnmente utilizado en la conversación).

p.ej:

Nombre completo: William Gates III; Nombre de la familia: Gates; Conocido como: Bill

Nombre completo: Soong Li; Apellido de la familia: Soong; Conocido como: Lisa


Dividir nombres es más difícil de lo que parece. Algunos nombres tienen dos apellidos; algunas personas ingresarán un primer, segundo y último nombre; algunos nombres tienen dos nombres de trabajo. La forma más confiable (o menos confiable) de manejar nombres es capturar siempre el nombre y el apellido en campos separados. Por supuesto, esto plantea sus propios problemas, como la forma de manejar personas con un solo nombre, asegurándose de que funcione para los usuarios que tienen un pedido diferente de partes de nombre.

Los nombres son difíciles, maneje con cuidado.


El problema al tratar de dividir los nombres de una sola entrada es que no obtendrás el apellido completo para las personas con espacios en sus apellidos, y no creo que puedas escribir código para administrarlo por completo.

Te recomendaría que pidas los nombres por separado si es posible.


Especificaría un formato estándar (algunos formularios los usan), como "Escriba su nombre en el nombre, el formulario del apellido ".

Lo hace más fácil para usted, ya que los nombres generalmente no contienen una coma. También verifica que tus usuarios ingresen tanto el nombre como el apellido.


Una manera fácil de hacer exactamente lo que pediste en python es

name = "Thomas Winter" LastName = name.split()[1]

(observe las parantheses en la división de llamadas a funciones).

split () crea una lista donde cada elemento es de su cadena original, delimitada por espacios en blanco. Ahora puede tomar el segundo elemento usando name.split () [1] o el último elemento usando name.split () [- 1]

Sin embargo, como dijeron otros, a menos que esté SEGURO de que solo está obteniendo una cadena como "Nombre_Primero Apellido_nombre", existen muchos más problemas.


probablemente quieras usar rsplit para esto:

rsplit ([sep [, maxsplit]])

Devuelve una lista de las palabras en la cadena, usando sep como cadena del delimitador. Si se da maxsplit, como máximo se hacen divisiones maxsplit, las más a la derecha. Si no se especifica sep o None, cualquier cadena de espacio en blanco es un separador. A excepción de la división desde la derecha, rsplit () se comporta como split (), que se describe en detalle a continuación. Nuevo en la versión 2.4.


Dado que hay tantas variaciones diferentes de cómo las personas escriben sus nombres, esta es una forma básica de obtener el nombre / apellido a través de expresiones regulares.

import re p = re.compile(r''^(/s+)?(Mr(/.)?|Mrs(/.)?)?(?P<FIRST_NAME>.+)(/s+)(?P<LAST_NAME>.+)$'', re.IGNORECASE) m = p.match(''Mr. Dingo Bat'') if(m != None): first_name = m.group(''FIRST_NAME'') last_name = m.group(''LAST_NAME'')




Definitivamente es una tarea más complicada de lo que parece en la superficie. Escribí algunos de los desafíos, así como mi algoritmo para resolverlo en mi blog. Asegúrate de revisar mi proyecto de Google Code si quieres la última versión en PHP:

http://www.onlineaspect.com/2009/08/17/splitting-names/


Así es como lo hago en mi aplicación:

def get_first_name(fullname): firstname = '''' try: firstname = fullname.split()[0] except Exception as e: print str(e) return firstname def get_last_name(fullname): lastname = '''' try: index=0 for part in fullname.split(): if index > 0: if index > 1: lastname += '' '' lastname += part index += 1 except Exception as e: print str(e) return lastname def get_last_word(string): return string.split()[-1] print get_first_name(''Jim Van Loon'') print get_last_name(''Jim Van Loon'') print get_last_word(''Jim Van Loon'')


La regla de oro de los datos no se agrega demasiado pronto: es mucho más fácil pegar los campos juntos que separarlos. La mayoría de las personas también tienen un segundo nombre que debería ser un campo opcional. Algunas personas tienen una plétora de segundos nombres. Algunas personas solo tienen un nombre , una palabra. Algunas culturas comúnmente tienen un diccionario de segundo nombre, que rinde homenaje al árbol genealógico de regreso al Golgafrincham Ark landing.

Aquí no necesita una solución de código; necesita una regla de negocio.


Aquí está cómo hacerlo en SQL . Pero la normalización de datos con este tipo de cosas es realmente un oso. Estoy de acuerdo con Dave DuPlantis sobre pedir insumos por separado.