【问题标题】:Python - Capitalize only first letter of each word in a stringPython - 仅将字符串中每个单词的首字母大写
【发布时间】:2021-09-07 03:01:30
【问题描述】:

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

我试过以下方法:

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

虽然这个输出几乎是正确的,但我希望最初的 Cbh1 是 CBH1。有什么建议吗?

【问题讨论】:

  • capitalize 函数不知道缩写。怎么可能?

标签: python regex uppercase capitalize


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-06-19
      • 2011-01-20
      • 2014-05-19
      • 2010-12-05
      • 2022-10-06
      • 2016-02-15
      相关资源
      最近更新 更多