我正在寻找一种更健壮的方式来转换下面的字符串。我想找到3个单词的前3个字母并改变大小写。单词可以是任何东西,现在我只是使用字符串替换每个小写字母。python正则表达式case change
s1 = 'hello.crazy.world.txt'
s1 = s1.replace('h','H')
我正在寻找一种更健壮的方式来转换下面的字符串。我想找到3个单词的前3个字母并改变大小写。单词可以是任何东西,现在我只是使用字符串替换每个小写字母。python正则表达式case change
s1 = 'hello.crazy.world.txt'
s1 = s1.replace('h','H')
str.title
大写的连续的字母组 - 你只需要排除的扩展。要做到这一点
方式一:
In [5]: name, ext = s.rsplit('.', 1)
In [6]: '{}.{}'.format(name.title(), ext)
Out[6]: 'Hello.Crazy.World.txt'
你可以使用str.capitalize
s1 = 'hello.crazy.world.txt'
out = '.'.join([i.capitalize() for i in s1.split('.')])
这所有大写的第一个字母,生产'Hello.Crazy.World.Txt'
。
如果您只想为前三个单词执行此操作,则可以使用切片,然后附加扩展名。
s1 = 'hello.crazy.world.txt'
split = s1.split('.')
extension = split[-1]
capitalized = [i.capitalize() for i in split[:-1]]
capitalized.append(extension)
out = '.'.join(capitalized)
这产生了'Hello.Crazy.World.txt'
。
如果你有一个你不喜欢大写的项目,你可以省略该项目(比如本例中的最后一个项目),那么使用大写字母就是title。
一个更紧凑的方式将使用列表理解来把握每一个项目,与最后一个项目外,合并列表和在一个单一的步骤:
s1 = 'hello.crazy.world.txt'
split = s1.split('.')
out = '.'.join([i.capitalize() for i in split[:-1]] + [split[-1]])
最简单的解决方案加入了结果字符串使用.title伪():
>>> "hello.crazy.world.txt".title()
"Hello.Crazy.World.Txt"
既然你不想利用最后一部分,你会怎么做:
parts = "hello.crazy.world.txt".split(".")
result = '.'.join(parts[:-1]).title() + "." + parts[-1]
我知道,编辑答案,你比我打字时要快:) – tobspr
虽然你的问题是在这暧昧的,我想你想是这样的:
import os
st_filename = 'hello.crazy.world.txt'
st_base, st_ext = os.path.splitext(st_filename)
st_base = st_base.title()
st_filename = ''.join(st_base, st_ext)
# I am unsure if the splitext will work across platforms to be rejoined with join, but it seems to work on linux and Mac OS X
用点分隔的所有的话吗?不要使用'str'作为变量。你正在隐藏内置的'str',并且肯定会遇到使用实际的'str'对象的问题。 – idjaw
'split('。')'和'title()'是使用的好方法 –
是的,全部用点分开。关于var名称的好点,我改变了它。 – iheartcpp