proyectos ejemplos python string title-case

python - ejemplos - Título de una cadena con excepciones



django (8)

¡Usa el módulo titlecase.py ! Funciona solo para ingles

>>> from titlecase import titlecase >>> titlecase(''i am a foobar bazbar'') ''I Am a Foobar Bazbar''

¿Existe una forma estándar en Python para escribir una cadena (es decir, las palabras comienzan con mayúsculas, todos los caracteres en mayúscula tienen minúscula) pero dejando artículos como " and y " in minúscula"?


El método del título de Python 2.7 tiene un defecto.

value.title()

devolverá el Asistente de Carpenter cuando el valor sea Asistente de Carpenter

La mejor solución es probablemente la de @BioGeek usando el título de Stuart Colville. Que es la misma solución propuesta por @Etienne.


Hay algunos problemas con esto. Si usa dividir y unir, se ignorarán algunos caracteres de espacio en blanco. Los métodos de capitalizar y título incorporados no ignoran el espacio en blanco.

>>> ''There is a way''.title() ''There Is A Way''

Si una oración comienza con un artículo, no desea la primera palabra de un título en minúscula.

Teniendo esto en cuenta:

import re def title_except(s, exceptions): word_list = re.split('' '', s) # re.split behaves as expected final = [word_list[0].capitalize()] for word in word_list[1:]: final.append(word if word in exceptions else word.capitalize()) return " ".join(final) articles = [''a'', ''an'', ''of'', ''the'', ''is''] print title_except(''there is a way'', articles) # There is a Way print title_except(''a whim of an elephant'', articles) # A Whim of an Elephant


Hay estos métodos:

>>> mytext = u''i am a foobar bazbar'' >>> print mytext.capitalize() I am a foobar bazbar >>> print mytext.title() I Am A Foobar Bazbar

No hay opción de artículo en minúsculas. Tendría que codificarlo usted mismo, probablemente mediante el uso de una lista de artículos que desea reducir.


One-liner utilizando lista de comprensión y el operador ternario

reslt = " ".join([word.title() if word not in "the a on in of an" else word for word in "Wow, a python one liner for titles".split(" ")]) print(reslt)

Descompostura:

for word in "Wow, a python one liner for titles".split(" ") Divide la cadena en una lista e inicia un ciclo for (en la lista de comprensión)

word.title() if word not in "the a on in of an" else word usa el método nativo title() para titular el caso en la cadena si no es un artículo

" ".join une a los elementos de la lista con un separador de (espacio)


titlecase.py de titlecase.py de un guión Perl escrito por John Gruber para convertir cadenas en mayúsculas y minúsculas, pero evita capitalizar palabras pequeñas basadas en reglas del Manual de estilo del New York Times, así como atender varios casos especiales.

Algo de la inteligencia de estos guiones:

  • capitalizan palabras pequeñas como if, in, of, on , etc., pero las descapitalizarán si se escriben con mayúsculas erróneamente en la entrada.

  • los scripts suponen que las palabras con letras mayúsculas que no sean el primer carácter ya están en mayúscula correctamente. Esto significa que dejarán una palabra como "iTunes" solo, en lugar de convertirla en "ITunes" o, lo que es peor, "Itunes".

  • se saltan las palabras con puntos de línea; "Example.com" y "del.icio.us" permanecerán en minúscula.

  • tienen hacks codificados específicamente para tratar casos extraños, como "AT & T" y "Q & A", ambos contienen palabras pequeñas (at y a) que normalmente deberían estar en minúscula.

  • La primera y la última palabra del título siempre se escriben con mayúscula, por lo que los comentarios como "Nada que temer" se convertirán en "Nada de qué temer".

  • Una palabra pequeña después de dos puntos se escribirá en mayúscula.

Puedes descargarlo here .


not_these = [''a'',''the'', ''of''] thestring = ''the secret of a disappointed programmer'' print '' ''.join(word if word in not_these else word.title() for word in thestring.capitalize().split('' '')) """Output: The Secret of a Disappointed Programmer """

El título comienza con una palabra en mayúscula y no coincide con el artículo.


capitalize (word)

Esto debería hacer. Lo entiendo de manera diferente.

>>> mytext = u''i am a foobar bazbar'' >>> mytext.capitalize() u''I am a foobar bazbar'' >>>

De acuerdo, como se dijo en la respuesta anterior, debe hacer una capitalización personalizada:

mytext = u''i soy un foobar bazbar ''

def xcaptilize(word): skipList = [''a'', ''an'', ''the'', ''am''] if word not in skipList: return word.capitalize() return word k = mytext.split(" ") l = map(xcaptilize, k) print " ".join(l)

Estas salidas

I am a Foobar Bazbar