在标点和空白处拆分字符串的每个标记的第一个字母

2024-10-03 11:12:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为以下字符串命名:

"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在-)

一般来说,如何确保空格或标点后面的所有字母都大写?你知道吗

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

Keep uppercase after / in a string


Tags: 字符串string字母button命名空格printup
2条回答

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 object参数并返回替换字符串(在本例中,我们将完全匹配的字符串大写)。你知道吗

如果你无意中发现了这个问题,也一定要看看下面的@Christian answer,因为它提供了一种很好的分割字符串的方法:)

我的方法是将每个要大写的单词分开(使用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"
>>>

相关问题 更多 >