Python - 仅将字符串中每个单词的首字母大写

Python - Capitalize only first letter of each word in a string

我想检查第一个单词的第一个字符是否大写,如果没有,则将其大写,同时保留字符串的其余部分。

我试过以下方法:

import re
p = re.compile(r'((?<=[\.\?!]\s)(\w+)|(^\w+))')
def cap(match):
    return(match.group().capitalize())

p.sub(cap, 'CBH1 protein was analyzed. to evaluate the report')

>>> Output : Cbh1 protein was analyzed. To evaluate the report

虽然这个输出几乎是正确的,但我预计最初的 Cbh1CBH1。有什么建议吗?

这不是任何内置 str 方法的完美匹配:.title().capitalize() 将第一个字母后的所有字母小写,而 .upper() 将全部大写。

这并不优雅,但您可以明确地将第一个字母大写并附加其余字母:

def cap(match):
    grp = match.group()
    return grp[0].upper() + grp[1:]

>>> p.sub(cap, 'CBH1 protein was analyzed. to evaluate the report')
'CBH1 protein was analyzed. To evaluate the report'

您可以使用 [a-z]\w* 而不是 \w+。这样你将只匹配真正需要大写的字符串。

我也会用这种方式修复正则表达式:

(?:(?<=[.?!]\s)|^)[a-z]\w*