2016-04-23 26 views
0

以下の文字列をより堅牢な方法で変換したいと考えています。私は3つの単語の最初の3文字を見つけて、その場合を変更したいと思います。言葉は何でもかまいませんが、今では小文字ごとに文字列置換を使用しています。python正規表現の大文字小文字の変更

s1 = 'hello.crazy.world.txt' 

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

ドットで区切られたすべての単語がありますか?変数として 'str'を使わないでください。組み込みの 'str'をシャドーイングしていて、実際の' str'オブジェクトを使用している間は必ず問題が発生します。 – idjaw

+0

'split( '。')'と 'title()'は良い方法です –

+0

はい、すべてドットで区切ります。 varの名前についての良い点は、私はそれを変更しました。 – iheartcpp

答えて

5

str.titleは、連続した文字のグループを大文字に - あなたは拡張子を除外するだけであります。そうする

一つの方法:

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

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

'rsplit'は素晴らしいソリューションのように思える - それについて知らなかった – tobspr

+0

私はこのソリューションが好きですが、 ? – iheartcpp

+1

@iheartcpp: 'name.title()'、 ''。''、 'ext'を連結します。https://docs.python.org/3/library/string.html#formatstrings – vaultah

1

あなたはこれが'Hello.Crazy.World.Txt'を生産、すべての最初の文字を大文字にstr.capitalize

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

を使用することができます。

最初の3つの単語だけを使用したい場合は、スライスを使用して拡張子を追加することができます。

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]]) 
1

最も簡単な解決策を)(.TITLE使用している:

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

あなたは最後の部分を大文字にしたくないので、あなたがしたい:

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

私は知っている、答えを編集した、あなたは私が入力したよりも速かった: – tobspr

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 
関連する問題