Python 大写函数的较短代码
我在这里解决了这个问题 说明: 给你一个字符串。你的任务是把它的每个字都大写。在一个单词中,只有第一个字符是大写的。示例12abc大写时仍为12abc-因为此“title”不能正确处理像“1w 2r 3g”这样的字符串。 我需要检查数字和小写字母的组合。这是我的代码:Python 大写函数的较短代码,python,python-3.x,Python,Python 3.x,我在这里解决了这个问题 说明: 给你一个字符串。你的任务是把它的每个字都大写。在一个单词中,只有第一个字符是大写的。示例12abc大写时仍为12abc-因为此“title”不能正确处理像“1w 2r 3g”这样的字符串。 我需要检查数字和小写字母的组合。这是我的代码: def capitalize(string): result = list (string.title()) for index in range (len (string)-1): if string
def capitalize(string):
result = list (string.title())
for index in range (len (string)-1):
if string[index].isdigit () and string[index+1].islower ():
result[index+1] = result[index+1].lower()
result = ''.join([char for char in result])
return (result)
但是这个代码太麻烦了。有人能帮我做一个更优雅的蟒蛇式的决定吗?谢谢 您可以使用
re
模块
' '.join([x.capitalize() for x in s.split(' ')])
import re
someStr = '1 w 2 r 3ga hello world'
re.sub(r"(?<=[0-9])[a-zA-Z]", lambda m: m.group(0).lower(), someStr.title())
(?模块re
可以在这里提供帮助:
titlesub = re.compile(r'\b[a-zA-Z]').sub # Precompile regex and prebind method for efficiency
def capitalize(string):
return titlesub(lambda x: x.group(0).upper(), string)
注意:\b
处理单词/非单词字符边界(单词字符为字母数字和下划线),因此它将阻止12abc
将a
大写,但不会对“abc
(变成”abc
)这样做
虽然\b
很方便,但它确实意味着像“不会”
这样的字符串将被大写为“不会”
。如果这是一个问题,当前面没有非空格字符时,可以使用更有针对性的选择器来大写:
titlesub = re.compile(r'(?<!\S)[a-zA-Z]').sub
titlesub=re.compile(r')(?这里是一个不使用re
模块的替代解决方案
def capitalize(string):
result = []
for word in string.split():
result.append(word[0].upper() + word[1:].lower())
return (' '.join(result))
注意:不处理非空格空格(例如制表符).同意。您的答案是首选。我尝试了使用正则表达式的两种方法,以及使用join的列表理解,它们的得分都是20/20。因为练习上说-字符串由字母数字字符和空格组成。因此不需要处理特殊字符,如\t
\n
。啊,忘了word边界!是的,我认为这将适用于更多的情况!在下面的句子中,“一旦它们被创建,它们就不能被更改。”
,可能输出正确,一旦它们被创建,它们就不能被更改。
?@J.Piquard:Yar,整个问题很棘手。使用反向查找排除非空格字符可能会导致错误更好地理解“单词”的定义:titlesub=re.compile(r'(?如果有两个或更多)连续空格,结果将不相关,我们将保留所有空格。输入'1W2R3g'时,其输出为'1W2R3g',丢失两个空格。哼,在您的示例'1W2R3g'
中,我得到的字符串长度与'1W2R3g'
相同(前后10个字母).没错。还有其他测试用例,包括多个空格。你看到我关于@ShadowRanger答案的问题了吗?我还不熟悉正则表达式,它在我的待办事项列表中)
def capitalize(string):
result = []
for word in string.split():
result.append(word[0].upper() + word[1:].lower())
return (' '.join(result))