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

时间:2021-06-23 14:29:46

标签: python regex uppercase capitalize

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

我尝试了以下方法:

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。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

这不是任何内置 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'

答案 1 :(得分:1)

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

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

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