è un modo standard in Python per Titlecase una stringa (vale a dire le parole iniziano con caratteri maiuscoli, tutti i caratteri con carter rimanenti hanno minuscolo) ma lasciando articoli come and
, in
, e of
caratteri minuscoli?ci Titlecasing una stringa con eccezioni
risposta
Ci sono alcuni problemi con questo. Se usi split e join, alcuni caratteri dello spazio bianco verranno ignorati. I metodi di capitalizzazione e titolo incorporati non ignorano lo spazio bianco.
>>> 'There is a way'.title()
'There Is A Way'
Se una frase inizia con un articolo, non si desidera la prima parola di un titolo in minuscolo.
Tenendo questo in mente:
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
ci sono questi metodi:
>>> mytext = u'i am a foobar bazbar'
>>> print mytext.capitalize()
I am a foobar bazbar
>>> print mytext.title()
I Am A Foobar Bazbar
Non c'è alcuna opzione articolo minuscolo. Dovresti codificarti da solo, probabilmente usando un elenco di articoli che vuoi ridurre.
titlecase.py caratteri minuscoli articoli. –
capitalize (word)
Questo dovrebbe fare. Ho capito diversamente.
>>> mytext = u'i am a foobar bazbar'
>>> mytext.capitalize()
u'I am a foobar bazbar'
>>>
Ok come detto in risposta sopra, si deve fare un capitalizzare:
mytext = u'i sono un bazbar foobar'
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)
Emette
I am a Foobar Bazbar
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
"""
Il titolo inizia con cap parola in corsivo e che non corrisponde all'articolo.
Utilizzare il modulo titlecase.py! Funziona solo per l'inglese.
>>> from titlecase import titlecase
>>> titlecase('i am a foobar bazbar')
'I Am a Foobar Bazbar'
Il modulo titlecase non funziona se la stringa che stai convertendo contiene un numero in qualsiasi punto. – Troy
@Troy sembra che il problema del numero sia stato risolto, oppure non ho colpito il tuo caso limite. Es .: titlecase ('one 4 two') -> 'One 4 Two'. Ora titlecase ('1one') -> '1one', ma '1one'.title() ->' 1One '. sebbene questo caso successivo sia un caso limite e non sono sicuro che "1One" sia il titolo corretto. Inoltre non sono abbastanza interessato ad afferrare il mio libro di grammatica. –
Non funziona nel caso di "321 A BROADWAY STREET" dove ottengo "321 a Broadway Street". Utilizzando la soluzione proposta dal dheerosaur sopra produce "321 A Broadway Street". – MoreScratch
Stuart Colville has made a Python port di a Perl script written by John Gruber per convertire le stringhe in caso titolo, ma evita di capitalizzare le piccole parole in base alle regole del manuale del New York Times di stile, nonché di ristorazione per diversi casi particolari .
Alcuni la bravura di questi script:
che capitalizza piccole parole come se, in, di, il, ecc, ma li non-capitalizzare se sono erroneamente capitalizzati in l'input.
gli script presuppongono che le parole con lettere maiuscole diverse dal primo carattere siano già in maiuscolo correttamente. Ciò significa che lasceranno una parola come "iTunes" da solo, invece di ridurla in "ITunes" o, peggio, "Itunes".
saltano su qualsiasi parola con punti linea; "Example.com" e "del.icio.us" rimarranno in minuscolo.
hanno hack hard-coded specificamente a trattare i casi dispari, come “AT & T” e “Q & A”, entrambi i quali contengono piccole parole (ae a) che normalmente dovrebbe essere minuscola.
La prima e l'ultima parola del titolo sono sempre in maiuscolo, quindi l'input come "Nothing to be fear of" verrà trasformato in "Nothing to Be Afraid Of".
Una piccola parola dopo i due punti sarà in maiuscolo.
È possibile scaricarlo here.
Il metodo del titolo di Python 2.7 ha un difetto.
value.title()
sarà tornare Carpenter 'S Assistant quando il valore è Carpenter' s Assistente
La soluzione migliore è probabilmente quella da @BioGeek utilizzando Titlecase da Stuart Colville. Qual è la stessa soluzione proposta da @ Etienne.
One-liner utilizzando l'elenco comprensione e l'operatore 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)
Ripartizione:
for word in "Wow, a python one liner for titles".split(" ")
suddivide la stringa in un elenco e avvia un ciclo for (nell'elenco comprehenstion)
word.title() if word not in "the a on in of an" else word
utilizza il metodo nativo title()
per il titolo, la stringa se non è un articolo
" ".join
unisce gli elementi della lista con un separatore di (spazio)
- 1. Ci sono molte eccezioni in Bad design in Java?
- 2. corretta non stringa JavaScript eccezioni
- 3. Gestione delle eccezioni in C++ lanciando una stringa
- 4. In Emacs come faccio a contrassegnare una stringa quando ci si trova all'interno della stessa stringa?
- 5. jQuery contare quante div con una classe ci sono e messo in stringa
- 6. Quali eccezioni potrebbe stringa = stringa oltre a System.OutOfMemoryException?
- 7. Regex per trovare caratteri speciali in una stringa con alcune eccezioni
- 8. Avvolgere le eccezioni con le eccezioni del runtime con un'annotazione
- 9. Eccezioni Java Eccezioni C++
- 10. ACRA Android con eccezioni gestite
- 11. Sostituisce una stringa con un'altra stringa
- 12. modello T-SQL corrispondenza con le eccezioni
- 13. Eccezioni COM all'uscita con WPF
- 14. Eccezioni definite dall'utente con JMX
- 15. come si divide una stringa con una stringa in C#
- 16. Distribuire una directory specifica in npm con Travis-CI
- 17. CI Android con Atlassian Bamboo
- 18. Gitlab-CI con setup Gitlab
- 19. Commit una stringa con JGit
- 20. Come concatenare una stringa con una variabile?
- 21. UnitTest ExpectedException con più eccezioni
- 22. Perché ci" e CI (, ci {.... comportarsi in modo diverso?
- 23. Come concatenare `Object` con una stringa?
- 24. Asserire che una funzione genera eccezioni con Qunit
- 25. Conversione di stream in stringa e ritorno ... cosa ci manca?
- 26. Eccezioni non gestite con Global.asax
- 27. Invertire una stringa con caratteri accentati?
- 28. rimuovere ultime 14 cifre da stringa e una sottolineatura, se ci sono 14 cifre
- 29. Intercettare eccezioni
- 30. Come ottenere una stringa di traccia stack senza generare eccezioni in python?
+1 per il caso "frase che inizia con un articolo" – yassin
Perché è necessario? C'è una funzione "" ".split' che fa lo stesso. – wizzwizz4
@ wizzwizz4: 'str.split' non considera gli spazi contigui. 're.split' conserva spazi. Quindi, questa funzione non consuma spazi. – dheerosaur