我正在尋找一種更健壯的方式來轉換下面的字符串。我想找到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