224

我知道。capitalie()将字符串的第一个字母大写,但如果第一个字符是整数,该怎么办?

1个物体5砂质

到这个

1桶5桑迪
0

10个答案10

重置为默认值
300

只是因为没有人提到:

>>>'bob'.title()“鲍勃”>>>“sandy”.title()“桑迪”>>>“1bob”.title()“1任务”>>>“1sandy”.title()“1桑迪”

然而,这也会给

>>>“1bob sandy”.title()“1鲍勃·桑迪”>>>“1JoeBob”.title()“1乔博”

也就是说,它不仅仅是大写第一个字母字符。但后来.大写()有同样的问题,至少在那方面'joe Bob'.capitalie()=='joe Bob'好吧。

0
257

如果第一个字符是整数,则不会将第一个字母大写。

>>>'2s'大写()“2秒”

如果你想要这个功能,去掉数字,你可以使用“2”.isdigit()检查每个字符。

>>>s=“123sa”>>>对于枚举中的i,c:…如果不是c.isdigit():…中断... >>>s[:i]+s[i:].大写()“123Sa”
9
  • 5
    这就是这个答案的作用 评论 2012年9月13日16:00
  • 17
    我会使用if c.isalpha()而不是if not c.isdigit() 评论 2012年9月13日16:01
  • 1
    @Jan-PhilipGehrcke,这是读者的练习。您可以看到,在这种情况下,s从不为空,它总是“123sa”:D 评论 2012年9月13日16:02
  • 2
    @Jan-PhilipGehrcke:在这种情况下,next((i表示i,如果不是e.isdigit(),则在enumerate(test)中为e),“0”)解决空字符串情况 评论 2014年10月1日22:19
  • 7
    这个答案不正确。.大写也会将其他字符转换为更低。来自官方文档:“返回以标题为基础的S版本,即以标题大小写字符开头的单词,所有剩余的大小写字符都使用小写。"
    – 卡兰丹
    评论 2017年1月3日11:34
41

这与@Anon的答案类似,因为它保持了字符串其余大小写的完整性,而不需要重新模块。

定义切片索引(x):i=0对于x中的c:如果c.isalpha():i=i+1返回ii=i+1def upperfirst(x):i=切片索引(x)返回x[:i].upper()+x[i:]x=“0thisIsCamelCase”y=上标(x)打印(y)#0本案例

正如@Xan所指出的,该函数可以使用更多的错误检查(例如检查x是一个序列,但我省略了边缘案例来说明该技术)

根据@normanius评论更新(谢谢!)

感谢@GeoStoneMarten指出我没有回答这个问题-修正了那个

5
  • 2
    非常有用,但需要长度(x)==0分支。
    – Xan公司
    评论 2015年9月13日21:07
  • 由于python 2.5,空案例仍然可以在一行中处理:如果len(x)>0 else x,则返回x[0].upper()+x[1:]
    – 达尼奥
    评论 2016年6月13日10:25
  • 非常有用的答案,因为资本化&标题首先将整个字符串小写,然后仅将第一个字母大写。 评论 2016年11月14日10:16
  • 7
    有用。只需使用a[:1].upper()+a[1:],这将解决长度(X)==0角落里的箱子。
    – 正常的
    评论 2018年3月16日9:47
  • 1
    很好,但不适用于这种情况,因为该函数只大写第一个字符,而le第一个字符是数字而不是文本。在这种情况下,在使用和连接结果之前,需要拆分数字和数字。 评论 2018年4月25日10:10
24

下面是一行文字,它将大写第一个字母,并保留所有后续字母的大小写:

进口再进口key=“wordsWithOtherUppercaseLetters”key=re.sub('([a-zA-Z])',λx:x.groups()[0].upper(),key,1)打印密钥

这将导致带其他大写字母的单词

1
  • 这比得票最多的答案效率高得多 评论 2022年6月25日0:26
9

如所见在这里陈厚武回答,可以使用字符串包:

导入字符串capwords(“他们是比尔的英国朋友”)>>>“他们是比尔的英国朋友”
1
  • 2
    如何将第一个单词中的第一个字母大写? 评论 2021年8月28日5:18
7

单线:“”.join(sub[:1].upper()+sub[1:]代表text.split(“”)中的sub)

0
2

你可以替换第一个字母(前面有一个数字)使用regex的每个单词:

re.sub(r'(\d\w)',lambda w:w.组().upper(),'1bob 5sandy')输出:1鲍勃5桑迪
2
定义解算:对于s[:].split()中的i:s=s.replace(i,i.大写())返回s

这是实际的工作代码。.title()在“12name”情况下不起作用

1

我想到了这个:

进口再进口regex=re.compile(“[A-Za-z]”)#查找alphastr=“第一条str”s=regex.search(str).group()#查找第一个alphastr=str.replace(s,s.upper(),1)#只替换1个实例打印字符串
0
0
定义解算:名称=列表(s.split(“”))return“”.join([i.大写()代表名称中的i)

输入你的名字:john doe

返回首字母大写。(如果第一个字符是数字,则不会出现大写)

适用于任何名称长度

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.