python正则表达式案例更改

时间:2016-04-23 17:48:05

标签: python regex string

我正在寻找一种更健壮的方式来转换下面的字符串。我想找到3个单词的前3个字母并改变大小写。这些词可以是任何东西,现在我只是为每个小写字母使用字符串替换。

s1 = 'hello.crazy.world.txt'

s1 = s1.replace('h','H')

4 个答案:

答案 0 :(得分:5)

str.title大写连续字母组 - 您只需要排除该扩展名。

一种方法:

In [5]: name, ext = s.rsplit('.', 1)

In [6]: '{}.{}'.format(name.title(), ext)
Out[6]: 'Hello.Crazy.World.txt'

答案 1 :(得分:1)

您可以使用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'

使用大写字母超过标题的优点是标题大写每个单词后一段时间,如果你有一个你不想大写的项目,你可以省略该项目(例如本例中的最后一项)。

更紧凑的方法是使用列表推导来大写每个项目,除了最后一项,合并列表并在一个步骤中加入结果字符串。:

s1 = 'hello.crazy.world.txt'
split = s1.split('.')
out = '.'.join([i.capitalize() for i in split[:-1]] + [split[-1]])

答案 2 :(得分:1)

最简单的解决方案是使用.title():

>>> "hello.crazy.world.txt".title()
"Hello.Crazy.World.Txt"

由于您不想将最后一部分大写,您可以:

parts = "hello.crazy.world.txt".split(".")
result = '.'.join(parts[:-1]).title() + "." + parts[-1]

答案 3 :(得分:0)

虽然你的问题含糊不清,但我想你想要这样的事情:

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