将标点符号和空格拆分的字符串的每个标记的首字母大写
Capitalizing first letter of each token of a string split on punctuation and whitespace
我正在尝试为以下字符串命名:
"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)
更一般地说,如何确保 space 或标点符号后面的所有字母都大写?
这是来自的跟进:
我的处理方法是拆分每个要大写的单词(使用 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"
>>
如果需要拆分更多标点符号,只需将它们添加到正则表达式即可。例如,如果您确实决定需要在撇号后大写 words/characters,请添加:
"([ '/-])"
正则表达式可以工作:
>>> ''.join([word.capitalize() for word in split("([ '/-])", string)])
"Men'S L/S Button-Up"
>>>
string.capwords
对此不起作用,因为在内部,它使用 str.split()
生成令牌 (docs). str.split()
can only split on runs of whitespace (default behavior) or using a user-specified character/string (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) can be used to replace substrings inside the given string. The second argument there is a function that takes a match object 参数和 returns 替换字符串(在本例中,我们将完整匹配项大写)。
如果您无意中遇到了这个问题,请务必查看下面的@Christian 回答,因为它提供了一种很好的拆分字符串的替代方法:)
我正在尝试为以下字符串命名:
"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)
更一般地说,如何确保 space 或标点符号后面的所有字母都大写?
这是来自的跟进:
我的处理方法是拆分每个要大写的单词(使用 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"
>>
如果需要拆分更多标点符号,只需将它们添加到正则表达式即可。例如,如果您确实决定需要在撇号后大写 words/characters,请添加:
"([ '/-])"
正则表达式可以工作:
>>> ''.join([word.capitalize() for word in split("([ '/-])", string)])
"Men'S L/S Button-Up"
>>>
string.capwords
对此不起作用,因为在内部,它使用 str.split()
生成令牌 (docs). str.split()
can only split on runs of whitespace (default behavior) or using a user-specified character/string (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) can be used to replace substrings inside the given string. The second argument there is a function that takes a match object 参数和 returns 替换字符串(在本例中,我们将完整匹配项大写)。
如果您无意中遇到了这个问题,请务必查看下面的@Christian 回答,因为它提供了一种很好的拆分字符串的替代方法:)