अजगर ने पहले अक्षर को ही बड़ा किया


179

मुझे पता है .capitalize () एक स्ट्रिंग के पहले अक्षर को कैपिटल करता है लेकिन क्या होगा यदि पहला वर्ण एक पूर्णांक है?

यह

1bob
5sandy

इसके लिए

1Bob
5Sandy

जवाबों:


234

यदि पहला वर्ण पूर्णांक है, तो यह पहले अक्षर को कैपिटलाइज़ नहीं करेगा।

>>> '2s'.capitalize()
'2s'

यदि आप कार्यक्षमता चाहते हैं, तो अंकों को हटा दें, आप '2'.isdigit()प्रत्येक वर्ण की जांच के लिए उपयोग कर सकते हैं ।

>>> s = '123sa'
>>> for i, c in enumerate(s):
...     if not c.isdigit():
...         break
... 
>>> s[:i] + s[i:].capitalize()
'123Sa'

5
और इसका जवाब यही है, बहुत ज्यादा
njzk2

16
अगर c.isdigit () के बजाय c.isalpha () का उपयोग मैं करूंगा
njzk2

1
@ जन-फिलिपग्रही जो पाठक के लिए एक अभ्यास है। आप उस मामले में देख सकते हैं, एस कभी खाली नहीं होता है, यह हमेशा '123sa' होता है: D
अली अफसर

2
@ Jan-PhilipGehrcke: किस स्थिति में, next((i for i,e in enumerate(test) if not e.isdigit()), '0')इसे खाली स्ट्रिंग मामले के लिए हल करता है
njzk2

5
यह उत्तर सही नहीं है। . capitalizeअन्य वर्णों को भी निम्न में बदल देगा। आधिकारिक डॉक्स से: "S का शीर्षक शीर्षक वाला संस्करण लौटाएं, यानी शब्द शीर्षक केस के पात्रों से शुरू होते हैं, शेष सभी
कैसड में

246

केवल इसलिए कि किसी और ने इसका उल्लेख नहीं किया है:

>>> 'bob'.title()
'Bob'
>>> 'sandy'.title()
'Sandy'
>>> '1bob'.title()
'1Bob'
>>> '1sandy'.title()
'1Sandy'

हालाँकि, यह भी देगा

>>> '1bob sandy'.title()
'1Bob Sandy'
>>> '1JoeBob'.title()
'1Joebob'

इसका मतलब यह नहीं है कि पहले वर्णमाला वर्ण को केवल बड़ा किया जाए। लेकिन फिर .capitalize()एक ही मुद्दा है, कम से कम उस में 'joe Bob'.capitalize() == 'Joe bob', तो meh।


38

यह @ अननोन के जवाब के समान है कि यह स्ट्रिंग के बाकी मामले को बरकरार रखता है, बिना री मॉड्यूल की आवश्यकता के।

def sliceindex(x):
    i = 0
    for c in x:
        if c.isalpha():
            i = i + 1
            return i
        i = i + 1

def upperfirst(x):
    i = sliceindex(x)
    return x[:i].upper() + x[i:]

x = '0thisIsCamelCase'

y = upperfirst(x)

print(y)
# 0ThisIsCamelCase

जैसा कि @ Xan ने बताया, फ़ंक्शन अधिक त्रुटि जाँच का उपयोग कर सकता है (जैसे कि जाँच करना कि x एक अनुक्रम है - हालाँकि मैं तकनीक का वर्णन करने के लिए किनारे के मामलों को छोड़ रहा हूँ)

@Normanius टिप्पणी प्रति अपडेट (धन्यवाद!)

@GeoStoneMarten की ओर इशारा करते हुए धन्यवाद कि मैंने सवाल का जवाब नहीं दिया! -उपसर्ग किया


2
बहुत उपयोगी है, लेकिन एक len(x) == 0शाखा की आवश्यकता है ।
एक्सन सेप

अजगर 2.5 के बाद से खाली मामला अभी भी एक लाइन पर संभाला जा सकता है: return x[0].upper() + x[1:] if len(x) > 0 else x
डानियो

बहुत उपयोगी उत्तर, क्योंकि capitalizeऔर titleपहले पूरे स्ट्रिंग को कम करता है और फिर केवल पहले अक्षर को अपरकेस करता है।
जोनास लिब्रेब्रेक्ट

5
उपयोगी। बस उपयोग करें a[:1].upper() + a[1:], यह len(X)==0कोने के मामले का ध्यान रखेगा ।
मानदंड

1
अच्छी नौकरी लेकिन इस मामले के लिए काम न करें क्योंकि यह फ़ंक्शन केवल पहले बैक्टीरिया को कैपिटलाइज़ करता है और ले पहले बैक्टीरिया को डिजिट करता है न कि टेक्स्ट को। उपयोग करने से पहले आपको विभाजित संख्यात्मक और अंक चाहिए और इस मामले में परिणाम में शामिल होना चाहिए।
जियोस्टोनमार्टन

13

यहाँ एक-लाइनर है जो पहले अक्षर को अपरकेस करेगा और बाद के सभी अक्षरों को छोड़ देगा:

import re

key = 'wordsWithOtherUppercaseLetters'
key = re.sub('([a-zA-Z])', lambda x: x.groups()[0].upper(), key, 1)
print key

इसका परिणाम यह होगा WordsWithOtherUppercaseLetters


4

चेन होउवु द्वारा उत्तर के रूप में यहां देखने पर , स्ट्रिंग पैकेज का उपयोग करना संभव है:

import string
string.capwords("they're bill's friends from the UK")
>>>"They're Bill's Friends From The Uk"

1

मैं इसके साथ आया:

import re

regex = re.compile("[A-Za-z]") # find a alpha
str = "1st str"
s = regex.search(str).group() # find the first alpha
str = str.replace(s, s.upper(), 1) # replace only 1 instance
print str

1

आप preceded by a digitregex का उपयोग करके प्रत्येक शब्द के पहले अक्षर ( ) को बदल सकते हैं :

re.sub(r'(\d\w)', lambda w: w.group().upper(), '1bob 5sandy')

output:
 1Bob 5Sandy

1

एक लाइनर: ' '.join(sub[:1].upper() + sub[1:] for sub in text.split(' '))


मुझे लगता है कि आप इसका मतलब यह नहीं है? '' .जॉइन (उप [: 1]] ल्यूपर () + उप [1:] उप में के लिए text.split (''))
माइकल

सही किया। धन्यवाद @
मिचेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.