उदाहरण:
HILO -> Hilo
new york -> New York
SAN FRANCISCO -> San Francisco
क्या इस कार्य को करने के लिए कोई पुस्तकालय या मानक तरीका है?
उदाहरण:
HILO -> Hilo
new york -> New York
SAN FRANCISCO -> San Francisco
क्या इस कार्य को करने के लिए कोई पुस्तकालय या मानक तरीका है?
जवाबों:
titleडॉक्स से राइट का उपयोग क्यों न करें :
>>> "they're bill's friends from the UK".title()
"They'Re Bill'S Friends From The Uk"
यदि आप वास्तव में पास्कलकेस चाहते थे तो आप इसका उपयोग कर सकते हैं:
>>> ''.join(x for x in 'make IT pascal CaSe'.title() if not x.isspace())
'MakeItPascalCase'
title: "एल्गोरिथ्म एक साधारण भाषा-स्वतंत्र परिभाषा का उपयोग करता है, जो लगातार अक्षरों के समूहों के रूप में होता है। परिभाषा कई संदर्भों में काम करती है, लेकिन इसका मतलब है कि संकुचन और अधिकार शब्द सीमाओं में एपोस्ट्रोफ्स। जो वांछित परिणाम नहीं हो सकता है ”। एक संभव समाधान होगा रेगेक्स के साथ लॉरेंस के जवाब का उपयोग r"['\w]+"करना ताकि एपोस्ट्रोफ एक मैच समाप्त न हो (अतिरिक्त विराम चिह्न आवश्यकतानुसार जोड़ा जा सके)।
'make IT camel CaSe'.title().replace(' ', '')।
def toCamel(s): ret = ''.join(x for x in s.title() if not x.isspace()) return ret[0].lower() + ret[1:] toCamel("WRITE this in camelcase") 'writeThisInCamelcase'
def capitalizeWords(s):
return re.sub(r'\w+', lambda m:m.group(0).capitalize(), s)
re.sub"प्रतिस्थापन" के लिए एक फ़ंक्शन ले सकता है (केवल एक स्ट्रिंग के बजाय, जिसका उपयोग अधिकांश लोगों को परिचित लगता है)। इस उत्तर फ़ंक्शन को re.Matchपैटर्न के प्रत्येक मैच के लिए एक ऑब्जेक्ट के साथ बुलाया जाएगा , और परिणाम (जो एक स्ट्रिंग होना चाहिए) का उपयोग उस मैच के प्रतिस्थापन के रूप में किया जाएगा।
एक ही बात का एक लंबा संस्करण:
WORD_RE = re.compile(r'\w+')
def capitalizeMatch(m):
return m.group(0).capitalize()
def capitalizeWords(s):
return WORD_RE.sub(capitalizeMatch, s)
यह पूर्व पैटर्न (आमतौर पर अच्छा रूप माना जाता है) को संकलित करता है और लैम्बडा के बजाय नामित फ़ंक्शन का उपयोग करता है।
matchफ़ंक्शन को दिया जाएगा? और चूंकि matchesनियमित अभिव्यक्तियों में समूह होते हैं। यह लाइन क्यों मौजूद है lambda m:m.group(0).capitalize()?
re.subकॉल करने योग्य (जैसे: एक फ़ंक्शन) को "प्रतिस्थापन" के रूप में दिया जाता है, तो यह उस कॉल करने योग्य के लिए मैच ऑब्जेक्ट को पास करता है, और एक स्ट्रिंग वापस पाने की उम्मीद करता है जो वास्तव में प्रतिस्थापन के रूप में उपयोग करता है। यदि आप लैम्ब्डा को भ्रमित करते हुए पाते हैं, तो "अधिक लंबा संस्करण" बिल्कुल वैसी ही क्रिया को अधिक क्रियात्मक तरीके से करता है।
एक क्यों नहीं लिखा? ऐसा कुछ आपकी आवश्यकताओं को पूरा कर सकता है:
def FixCase(st):
return ' '.join(''.join([w[0].upper(), w[1:].lower()]) for w in st.split())
नोट: मैं अभी तक एक और उत्तर क्यों प्रदान कर रहा हूं? यह उत्तर प्रश्न के शीर्षक पर आधारित है और यह धारणा कि ऊंट को परिभाषित किया गया है: शब्दों की एक श्रृंखला जिसे समाप्त नहीं किया गया है (कोई रिक्त स्थान नहीं!) जैसे कि मूल शब्दों में से प्रत्येक एक बड़े अक्षर से शुरू होता है (शेष लोअरकेस होता है) श्रृंखला के पहले शब्द को छोड़कर (जो पूरी तरह से लोअरकेस है)। यह भी माना जाता है कि "सभी तार" ASCII वर्ण सेट को संदर्भित करता है; यूनिकोड इस समाधान के साथ काम नहीं करेगा)।
उपरोक्त परिभाषा को देखते हुए, यह फ़ंक्शन
import re
word_regex_pattern = re.compile("[^A-Za-z]+")
def camel(chars):
words = word_regex_pattern.split(chars)
return "".join(w.lower() if i is 0 else w.title() for i, w in enumerate(words))
, जब कहा जाता है, इस तरीके से परिणाम होगा
camel("San Francisco") # sanFrancisco
camel("SAN-FRANCISCO") # sanFrancisco
camel("san_francisco") # sanFrancisco
ध्यान दें कि यह विफल हो जाता है जब एक पहले से ही ऊंट आवरण स्ट्रिंग के साथ प्रस्तुत किया जाता है!
camel("sanFrancisco") # sanfrancisco <-- noted limitation
ध्यान दें कि यह कई यूनिकोड स्ट्रिंग्स के साथ विफल हो जाता है
camel("México City") # mXicoCity <-- can't handle unicode
मेरे पास इन मामलों के लिए कोई समाधान नहीं है (या कुछ रचनात्मकता के साथ पेश किया जा सकता है)। तो, जैसा कि सभी चीजों में है, जो तार के साथ करना है, अपने स्वयं के किनारे के मामलों को कवर करें और यूनिकोड के साथ शुभकामनाएं!
संभावित पुस्तकालय: https://pypi.org/project/stringcase/
उदाहरण:
import stringcase
stringcase.camelcase('foo_bar_baz') # => "fooBarBaz"
हालांकि यह संदेहास्पद है कि क्या यह रिक्त स्थान छोड़ देगा। (उदाहरण यह दिखाते हैं कि यह अंतरिक्ष को हटा रहा है, लेकिन एक बग ट्रैकर मुद्दा है कि यह उन्हें अंदर छोड़ देता है।)
बस .title () का उपयोग करें, और यह राजधानी के हर शब्द के पहले अक्षर को बदल देगा, बाकी छोटे में:
>>> a='mohs shahid ss'
>>> a.title()
'Mohs Shahid Ss'
>>> a='TRUE'
>>> b=a.title()
>>> b
'True'
>>> eval(b)
True
def camelCase(st):
s = st.title()
d = "".join(s.split())
d = d.replace(d[0],d[0].lower())
return d