繁体   English   中英

在标点符号和空格处分割的字符串的每个令牌的首字母大写

[英]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)

更一般而言,如何确保空格或标点后面的所有字母都大写?

这是来自以下方面的后续行动:

在字符串中/后保持大写

我要解决此问题的方法是,将要大写的每个单词拆分(使用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"
>>>

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.subdocs )可用于替换给定字符串中的子字符串。 第二个参数是一个带有match对象参数并返回替换字符串的函数(在这种情况下,我们将全部匹配大写)。

如果您偶然发现了这个问题,还请确保查看下面的@Christian答案,因为它提供了一种拆分字符串的好方法:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM