ฉันรู้ว่า. capitalize () ใช้ตัวอักษรตัวแรกของสตริงเป็นตัวพิมพ์ใหญ่ แต่จะเกิดอะไรขึ้นถ้าอักขระตัวแรกเป็นจำนวนเต็ม?
นี้
1bob
5sandy
สำหรับสิ่งนี้
1Bob
5Sandy
ฉันรู้ว่า. capitalize () ใช้ตัวอักษรตัวแรกของสตริงเป็นตัวพิมพ์ใหญ่ แต่จะเกิดอะไรขึ้นถ้าอักขระตัวแรกเป็นจำนวนเต็ม?
นี้
1bob
5sandy
สำหรับสิ่งนี้
1Bob
5Sandy
คำตอบ:
หากอักขระตัวแรกเป็นจำนวนเต็มจะไม่ใช้อักษรตัวแรกเป็นตัวพิมพ์ใหญ่
>>> '2s'.capitalize()
'2s'
หากคุณต้องการฟังก์ชั่นดึงตัวเลขคุณสามารถใช้'2'.isdigit()
เพื่อตรวจสอบอักขระแต่ละตัวได้
>>> s = '123sa'
>>> for i, c in enumerate(s):
... if not c.isdigit():
... break
...
>>> s[:i] + s[i:].capitalize()
'123Sa'
next((i for i,e in enumerate(test) if not e.isdigit()), '0')
แก้มันสำหรับกรณีสตริงที่ว่างเปล่า
. capitalize
จะแปลงตัวอักษรอื่น ๆ ให้ต่ำลงด้วย จากเอกสารอย่างเป็นทางการ: "ส่งคืนเวอร์ชันที่เป็นหัวเรื่องของ S นั่นคือคำที่ขึ้นต้นด้วยตัวอักษรตัวพิมพ์ใหญ่และตัวอักษรที่เหลือทั้งหมดมีตัวพิมพ์เล็ก "
เพียงเพราะไม่มีใครพูดถึง:
>>> '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'
นั้น
นี่คล้ายกับคำตอบของ @ Anon ที่ทำให้ส่วนที่เหลือของสตริงเป็นเหมือนเดิมโดยไม่ต้องใช้โมดูลอีก
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
ฟังก์ชั่นอาจใช้การตรวจสอบข้อผิดพลาดเพิ่มเติม (เช่นการตรวจสอบว่า x เป็นลำดับ - แต่ฉันไม่เห็นกรณีขอบเพื่อแสดงเทคนิค)
อัปเดตตามความคิดเห็น @normanius (ขอบคุณ!)
ขอบคุณ @GeoStoneMarten ที่ชี้ให้เห็นว่าฉันไม่ได้ตอบคำถาม! - แก้ไขแล้ว
len(x) == 0
สาขา
return x[0].upper() + x[1:] if len(x) > 0 else x
capitalize
& title
ตัวพิมพ์เล็กทั้งตัวแรกและตัวพิมพ์ใหญ่ตัวแรกเท่านั้น
a[:1].upper() + a[1:]
สิ่งนี้จะดูแลตัวเรือนlen(X)==0
มุม
นี่คือหนึ่งซับที่จะพิมพ์ใหญ่ตัวอักษรตัวแรกและออกจากกรณีของตัวอักษรที่ตามมาทั้งหมด:
import re
key = 'wordsWithOtherUppercaseLetters'
key = re.sub('([a-zA-Z])', lambda x: x.groups()[0].upper(), key, 1)
print key
ซึ่งจะส่งผลให้ WordsWithOtherUppercaseLetters
เมื่อเห็นที่นี่ตอบโดยเฉิน Houwu เป็นไปได้ที่จะใช้แพคเกจสตริง:
import string
string.capwords("they're bill's friends from the UK")
>>>"They're Bill's Friends From The Uk"
ฉันมากับสิ่งนี้:
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
คุณสามารถแทนที่อักษรตัวแรก ( preceded by a digit
) ของแต่ละคำโดยใช้ regex:
re.sub(r'(\d\w)', lambda w: w.group().upper(), '1bob 5sandy')
output:
1Bob 5Sandy