问题描述
我想检查第一个单词的第一个字符是否大写,如果不是,则将其大写,保留字符串的其余部分完整。
我尝试了以下方法:
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。有什么建议吗?
解决方法
这不是任何内置 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*