我正试图为以下字符串加上标题:
"Men's L/s button-up"
我现在正在使用string.capwords
,但无法正常工作。
例如:
x = "Men's L/s button-up"
y = string.capwords(x)
print(y)
输出:
Men's L/s Button-up
但我想要
Men's L/S Button-Up
(/后面的大写S和-后面的大写U)
更一般而言,如何确保空格或标点后面的所有字母都大写?
这是来自
的后续活动答案 0 :(得分:3)
我要解决的方法是将每个要大写的单词(使用re.split
进行拆分,将要单词大写(使用str.capitalize
),然后重新组合单词以获得单个字符串(使用str.join
):
>>> from re import split
>>>
>>> string = "Men's L/s button-up"
>>> ''.join([word.capitalize() for word in split("([ /-])", string)])
"Men's L/S Button-Up"
>>
如果需要分割更多的标点符号,只需将它们添加到正则表达式中即可。例如,如果您确定需要在撇号后大写单词/字符,请添加:
"([ '/-])"
可以使用正则表达式:
>>> ''.join([word.capitalize() for word in split("([ '/-])", string)])
"Men'S L/S Button-Up"
>>>
答案 1 :(得分:3)
string.capwords
对此不起作用,因为在内部,它使用str.split()
生成令牌(docs)。 str.split()
仅可在空白运行(默认行为)或使用用户指定的字符/字符串(docs)时拆分。如果指定了字符串,则将其视为一个整体,而不是单独的字符。
要实现所需的功能,我将使用正则表达式,例如:
import re
x = "Men's L/s button-up"
y = re.sub(r'[\w]+', lambda m: m.group(0).capitalize(), x)
print(y)
# "Men'S L/S Button-Up"
re.sub
(docs)可用于替换给定字符串内的子字符串。第二个参数是一个函数,该函数接受一个match object参数并返回替换字符串(在这种情况下,我们将全部匹配大写)。
如果您偶然发现了这个问题,还请确保查看下面的@Christian答案,因为它提供了一种拆分字符串的好方法:)