Czy istnieje standardowy sposób w Pythonie do titlecase ciąg (tj słowa zaczynają się wielkimi literami, wszystkie pozostałe obudowane znaki mają małe litery), ale pozostawiając artykułów takich jak and
, in
i of
małe litery?
python
string
title-case
yassin
źródło
źródło
re
konieczne? Jest"".split
funkcja, która robi to samo.str.split
nie uwzględnia ciągłych spacji.re.split
zachowuje spacje. Więc ta funkcja nie zjada żadnych spacji."".split()
ich nie rozważałem, ale"".split(" ")
tak.title_except('a whim of aN elephant', articles)
przypadku sprawy. Możesz użyćword.lower() in exceptions
warunku filtrowania, aby to naprawić.2001 a Space Odyssey
Powinien powrócić2001 A Space Odyssey
, gdziea
jest wielką literą, ponieważ następuje po liczbie. Z góry dziękuję.Użyj modułu titlecase.py ! Działa tylko w języku angielskim.
>>> from titlecase import titlecase >>> titlecase('i am a foobar bazbar') 'I Am a Foobar Bazbar'
GitHub: https://github.com/ppannuto/python-titlecase
źródło
Istnieją następujące metody:
>>> mytext = u'i am a foobar bazbar' >>> print mytext.capitalize() I am a foobar bazbar >>> print mytext.title() I Am A Foobar Bazbar
Nie ma opcji dla małych liter. Będziesz musiał sam to zakodować, prawdopodobnie używając listy artykułów, które chcesz obniżyć.
źródło
Stuart Colville stworzył port Pythona dla skryptu Perla napisanego przez Johna Grubera w celu przekształcenia ciągów znaków w tytułowe litery, ale unika stosowania małych słów w oparciu o zasady z podręcznika stylu New York Times, a także zaspokajania kilku specjalnych przypadków.
Niektóre sprytne skrypty:
małe słowa, takie jak if, in, of, on , itp. zapisują wielką literą, ale usuwają je z dużej litery, jeśli są błędnie pisane wielką literą w danych wejściowych.
skrypty zakładają, że słowa z dużymi literami innymi niż pierwszy znak są już poprawnie pisane wielką literą. Oznacza to, że zostawią samo słowo takie jak „iTunes”, zamiast zamieniać je w „iTunes” lub, co gorsza, „iTunes”.
pomijają wszystkie słowa kropkami; „Example.com” i „del.icio.us” pozostaną małymi literami.
mają zakodowane hacki przeznaczone specjalnie do obsługi dziwnych przypadków, takich jak „AT&T” i „Q&A”, z których oba zawierają małe słowa (at i a), które normalnie powinny być pisane małymi literami.
Pierwsze i ostatnie słowo w tytule jest zawsze pisane wielką literą, więc wpis typu „Nie ma się czego bać” zostanie zamieniony na „Nie ma się czego bać”.
Małe słowo po dwukropku będzie pisane wielką literą.
Możesz to pobrać tutaj .
źródło
To powinno wystarczyć. Rozumiem to inaczej.
>>> mytext = u'i am a foobar bazbar' >>> mytext.capitalize() u'I am a foobar bazbar' >>>
Ok, jak wspomniano w odpowiedzi powyżej, musisz wprowadzić niestandardową wielkość liter:
mytext = u'i jestem 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)
To wychodzi
źródło
Metoda title w Pythonie 2.7 ma w sobie wadę.
powróci cieśli S Assistant gdy wartość Carpenter ' s Asystent
Najlepszym rozwiązaniem jest prawdopodobnie to od @BioGeek przy użyciu titlecase od Stuarta Colville'a. To jest to samo rozwiązanie, które proponuje @Etienne.
źródło
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 """
Tytuł zaczyna się od słowa pisanego wielką literą, które nie pasuje do artykułu.
źródło
Jednowierszowy wykorzystujący rozumienie list i operator trójskładnikowy
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)
Awaria:
for word in "Wow, a python one liner for titles".split(" ")
Dzieli ciąg na listę i inicjuje pętlę for (w interpretacji listy)word.title() if word not in "the a on in of an" else word
używa metody natywnejtitle()
do tytułowania ciągu znaków, jeśli nie jest to artykuł" ".join
łączy elementy listy separatorem (spacja)źródło
Jednym z ważnych przypadków, które nie są brane pod uwagę, są akronimy (rozwiązanie python-titlecase może obsłużyć akronimy, jeśli jawnie podasz je jako wyjątki). Zamiast tego wolę po prostu unikać obniżania obudowy. Przy takim podejściu akronimy, które są już dużymi literami, pozostają wielkimi literami. Poniższy kod jest modyfikacją kodu pierwotnie dostarczonego przez dheerosaura.
# This is an attempt to provide an alternative to ''.title() that works with # acronyms. # There are several tricky cases to worry about in typical order of importance: # 0. Upper case first letter of each word that is not an 'minor' word. # 1. Always upper case first word. # 2. Do not down case acronyms # 3. Quotes # 4. Hyphenated words: drive-in # 5. Titles within titles: 2001 A Space Odyssey # 6. Maintain leading spacing # 7. Maintain given spacing: This is a test. This is only a test. # The following code addresses 0-3 & 7. It was felt that addressing the others # would add considerable complexity. def titlecase( s, exceptions = ( 'and', 'or', 'nor', 'but', 'a', 'an', 'and', 'the', 'as', 'at', 'by', 'for', 'in', 'of', 'on', 'per', 'to' ) ): words = s.strip().split(' ') # split on single space to maintain word spacing # remove leading and trailing spaces -- needed for first word casing def upper(s): if s: if s[0] in '‘“"‛‟' + "'": return s[0] + upper(s[1:]) return s[0].upper() + s[1:] return '' # always capitalize the first word first = upper(words[0]) return ' '.join([first] + [ word if word.lower() in exceptions else upper(word) for word in words[1:] ]) cases = ''' CDC warns about "aggressive" rats as coronavirus shuts down restaurants L.A. County opens churches, stores, pools, drive-in theaters UConn senior accused of killing two men was looking for young woman Giant asteroid that killed the dinosaurs slammed into Earth at ‘deadliest possible angle,’ study reveals Maintain given spacing: This is a test. This is only a test. '''.strip().splitlines() for case in cases: print(titlecase(case))
Po uruchomieniu generuje:
CDC Warns About "Aggressive" Rats as Coronavirus Shuts Down Restaurants L.A. County Opens Churches, Stores, Pools, Drive-in Theaters UConn Senior Accused of Killing Two Men Was Looking for Young Woman Giant Asteroid That Killed the Dinosaurs Slammed Into Earth at ‘Deadliest Possible Angle,’ Study Reveals Maintain Given Spacing: This Is a Test. This Is Only a Test.
źródło