使用.title()方法而不转换为小写

2024-09-27 21:25:31 发布

您现在位置:Python中文网/ 问答频道 /正文

这是一个非常简单的问题,例如,我需要在Python中将字符串luis XIV de francia转换为Luis XIV De Francia。但是,如果我像这样使用.title()方法:

'luis XIV de francia'.title()

结果是Luis Xiv De Francia。我不想XIV变成Xiv

所以问题是:是否有类似.title()的东西,但不会将其他字符(那些不是单词第一个字母的字符)转换为小写

谢谢你的帮助


Tags: 方法字符串title字母de字符单词中将
2条回答

title()方法不知道'xiv'是罗马数字。最好的方法是分割字符串,然后title()相关片段,保持XIV部分不变,然后将片段连接在一起。我认为程序不会意识到一组字符可能是罗马数字

def title_except_all_caps(input):
    parts = [p.title() if p.islower() else p for p in input.split()]
    return ' '.join(parts)

虽然解释中提到了罗马数字,但我想让你明白这里发生了什么。这会将原始字符串拆分为空格,如果它是小写字符串,则对其应用title()。如果没有,就别管它。最后,使用一个空格作为连接符连接各个部分,从而组装生成的字符串

您可以使用regular expressions查找任何单词的第一个字母,然后upper()查找它:

import re
def custom_title(s):
    re.sub(r"(?:(?<=\W)|^)\w(?=\w)", lambda x: x.group(0).upper())

custom_title('luis XIV de francia')
# > 'Luis XIV De Francia'

regex's sub方法使其适用于带有点状标记的较大字符串

custom_title('luis XIV de francia, something. foo-bar')
# > 'Luis XIV De Francia, Something. Foo-Bar'

这里还有另一个版本也可以大写单字母单词

def custom_title(s):
    return re.sub(r"(?:(?<=\W)|^)\w", lambda x: x.group(0).upper(), s)

相关问题 更多 >

    热门问题