簡體   English   中英

Python將所有大寫字母轉換為標題大小寫,而不會弄亂駝峰大小寫

[英]Python convert all-caps into title case without messing with camel case

我正在使用 python3 並且想將包含所有大寫單詞(單獨或在單詞中)的字符串轉換為標題大小寫(第一個字母大寫)。 不想破壞單詞中間的一次性大寫字母(駝峰式),但如果有重復的大寫字母,我只想保留第一個大寫字母。

這是所需的行為

>>> a = "TITLE BY DeSoto theHUMUNGUSone"
>>> print(myfunc(a))
Title By DeSoto TheHumungusone

在單詞中,“將每個單詞的開頭大寫,然后將大寫字母后面的任何字母變為小寫。”

str.title()以我想要的方式處理首字母,但它使所有單詞內字母小寫,而不僅僅是第一個字母之后的字母。

我正在使用一種正則表達式方法,它將大寫字母后面的任何內容變為小寫,但我一直將所有其他字母大寫。

用 lambda 替換正則表達式是可行的方法:

import re

a = "TITLE BY DeSoto theHUMUNGUSone"
print(re.sub('[A-Z]+', lambda x: x.group(0).title(), a))

輸出:

Title By DeSoto theHumungusone

哈哈,這聽起來像是一個 leetcode 問題! 除了正則表達式之外,您還可以使用這個小算法,它只是創建一個新字符串,並遍歷字符,當遇到大寫字母時將任何后續轉換為小寫字母。 您可以輕松修改它以使空格后面的任何內容也大寫。

b = ''
i = 0
while i < len(a):
    if a[i].isupper():
        b += a[i]
        for j in range(i + 1, len(a)):
            if a[j].isupper():
                b += a[j].lower()
            else:
                i = j - 1
                break
    else:
        b += a[i]
    i += 1

這個怎么樣:

import re

a = "TITLE BY DeSoto theHUMUNGUSone"

def transform(a):
    chunks = []
    for chunk in re.findall(r'[a-z]*[A-Z]*[a-z]*[ ]?', a):
        if chunk:
            if chunk[0].isupper():
                chunk = chunk.capitalize()
                chunks.append(chunk.title())
            else:
                substring = chunk[0].upper()+chunk[1:]
                chunks.append(re.sub('[A-Z]+',lambda x:x.group().title(),substring))

    return ''.join(chunks)

transform(a)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM