繁体   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