वहाँ पायथन में एक मानक तरीका एक स्ट्रिंग titlecase है (यानी शब्द अपरकेस वर्णों के साथ शुरू, सभी शेष मामलों वर्ण लोअरकेस है), लेकिन जैसे छोड़ने लेख and
, in
और of
लोवरकेस?
जवाबों:
इसके साथ कुछ समस्याएं हैं। यदि आप विभाजन का उपयोग करते हैं और जुड़ते हैं, तो कुछ सफेद अंतरिक्ष वर्णों को अनदेखा किया जाएगा। बिल्ट-इन कैपिटलाइज़ और टाइटल मेथड्स सफेद स्थान को अनदेखा नहीं करते हैं।
>>> 'There is a way'.title()
'There Is A Way'
यदि एक वाक्य एक लेख से शुरू होता है, तो आप लोअरकेस में शीर्षक का पहला शब्द नहीं चाहते हैं।
इनको ध्यान में रखते हुए:
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
str.split
सन्निहित स्थानों पर विचार नहीं करता है। re.split
रिक्त स्थान रखता है। इसलिए, यह फ़ंक्शन किसी भी स्थान को नहीं खाता है।
"".split()
ने सोचा कि मैंने उन पर विचार नहीं "".split(" ")
किया था।
title_except('a whim of aN elephant', articles)
केस के लिए सही तरीके से काम नहीं करेगा । आप word.lower() in exceptions
इसे ठीक करने के लिए फ़िल्टरिंग स्थिति का उपयोग कर सकते हैं ।
2001 a Space Odyssey
को वापस लौटना चाहिए 2001 A Space Odyssey
, जहां a
यह संख्या के रूप में पूंजीकृत है। अग्रिम में धन्यवाद।
टाइटलकेसहोम मॉड्यूल का उपयोग करें ! केवल अंग्रेजी के लिए काम करता है।
>>> from titlecase import titlecase
>>> titlecase('i am a foobar bazbar')
'I Am a Foobar Bazbar'
ये तरीके हैं:
>>> mytext = u'i am a foobar bazbar'
>>> print mytext.capitalize()
I am a foobar bazbar
>>> print mytext.title()
I Am A Foobar Bazbar
कोई लोअरकेस लेख विकल्प नहीं है। आपको अपने आप को यह कोड करना होगा कि शायद उन लेखों की एक सूची का उपयोग करके जिन्हें आप कम करना चाहते हैं।
स्टुअर्ट कॉलविले ने जॉन ग्रबेर द्वारा लिखित एक पर्ल स्क्रिप्ट का पायथन पोर्ट बनाया है, जो स्ट्रिंग्स को टाइटल केस में परिवर्तित करने के लिए है, लेकिन न्यू यॉर्क टाइम्स मैनुअल की शैली के नियमों के आधार पर छोटे शब्दों को कैपिटलाइज़ करने से बचता है, साथ ही कई अन्य मामलों के लिए खानपान भी करता है।
इन लिपियों की कुछ चतुराई:
वे छोटे शब्दों को कैपिटलाइज़ करते हैं जैसे कि, इन, ऑन , वगैरह, लेकिन अगर वे इनपुट में गलत तरीके से कैपिटल किए गए हैं, तो उन्हें अन-कैपिटल करेंगे।
लिपियाँ मानती हैं कि पहले अक्षर के अलावा अन्य बड़े अक्षरों वाले शब्द पहले से ही सही ढंग से पूँजीकृत हैं। इसका मतलब है कि वे "आईट्यून्स" जैसे शब्द को अकेले छोड़ देंगे, बजाय इसे "आईट्यून्स" या इससे भी बदतर, "इट्यून्स" में।
वे लाइन डॉट्स के साथ किसी भी शब्द को छोड़ देते हैं; "Example.com" और "del.icio.us" लोअरकेस बने रहेंगे।
उनके पास विशेष रूप से विषम मामलों से निपटने के लिए हार्ड-कोडेड हैक्स हैं, जैसे "एटी एंड टी" और "क्यू एंड ए", दोनों में छोटे शब्द (पर और ए) होते हैं जो सामान्य रूप से लोअरकेस होना चाहिए।
शीर्षक का पहला और अंतिम शब्द हमेशा पूंजीकृत होता है, इसलिए "कुछ भी नहीं डरने वाला" जैसे इनपुट को "नथिंग टू बी अफेयर" में बदल दिया जाएगा।
एक बृहदान्त्र के बाद एक छोटा शब्द पूंजीकृत किया जाएगा।
capitalize (word)
यह करना चाहिए। मैं इसे अलग तरह से प्राप्त करता हूं।
>>> mytext = u'i am a foobar bazbar'
>>> mytext.capitalize()
u'I am a foobar bazbar'
>>>
ठीक है जैसा कि ऊपर उत्तर में कहा गया है, आपको एक कस्टम कैपिटल बनाना होगा:
mytext = u'i am a 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)
यह आउटपुट
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
"""
शीर्षक पूंजीकृत शब्द से शुरू होता है और यह लेख से मेल नहीं खाता है।
सूची समझ और टर्नरी ऑपरेटर का उपयोग करते हुए वन-लाइनर
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)
टूट - फूट:
for word in "Wow, a python one liner for titles".split(" ")
स्ट्रिंग को एक सूची में विभाजित करता है और लूप के लिए पहल करता है (सूची समझ में)
word.title() if word not in "the a on in of an" else word
title()
यदि यह एक लेख नहीं है तो स्ट्रिंग को शीर्षक देने के लिए मूल विधि का उपयोग करता है
" ".join
(अंतरिक्ष) के एक सेपरेटर के साथ सूची तत्वों में शामिल होता है
एक महत्वपूर्ण मामला जिस पर विचार नहीं किया जा रहा है, वह समधर्मी है (यदि आप अपवाद के रूप में स्पष्ट रूप से प्रदान करते हैं तो पाइथन-टाइटलकेस सॉल्यूशन संभाल सकते हैं)। मैं इसके बजाय बस नीचे आवरण से बचने के लिए पसंद करते हैं। इस दृष्टिकोण के साथ, पहले से ही ऊपरी मामले वाले समरूप ऊपरी मामले में रहते हैं। निम्नलिखित कोड मूल रूप से ढेरोसोर द्वारा प्रदान किए जाने का एक संशोधन है।
# 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))
जब चलाया जाता है, तो यह निम्नलिखित पैदा करता है:
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.
re
जरूरी है? एक"".split
फ़ंक्शन है जो समान है।