文字列(主にstrクラス)の機能
目次
文字列の結合
# 文字列の結合
print( "str" + "str" )
#=> strstr
# 数値と結合する際は、自動型変換はされないので、strで囲む
i = 10
print( "str" + str( i ) )
#=> str10
print( "str" + i )
#=> TypeError: Can't convert 'int' object to str implicitly
# 「*」を使うと繰り返し
print( "str" * 3 )
#=> strstrstr
#=> 0や負の数を指定すると空文字が返る
# formatを使用して、好きな形式に変換
print( "今日は{0}です".format( "晴れ" ) )
#=> 今日は晴れです
print( "1 + 10 = {0}, 2 + 5 = {1}".format( 1 + 10, 2 + 5 ) )
#=> 1 + 10 = 11, 2 + 5 = 7
部分文字列の取得(substring的なもの)
# 5番目の文字を抽出 print( "abcdefghijklmn"[5] ) #=> f # -1を指定すると最後の文字 print( "abcdefghijklmn"[-1] ) #=> n # -2を指定すると最後から2番目 print( "abcdefghijklmn"[-2] ) #=> m # 5~8を指定して文字を抽出 print( "abcdefghijklmn"[5:8] ) #=> fgh # 8~最後まで抽出 print( "abcdefghijklmn"[8:-1] ) #=> ijklm # 3つ目を指定するとstep的に使える(下記だと1文字飛ばしで抽出) print( "abcdefghijklmn"[1:8:2] ) #=> bdfh
文字数を数える
# 文字列の長さを数える
print( len( "abc" ) )
#=> 3
# 全角文字もカウント可能
print( len( "あいうえお" ) )
# => 5
# 文字列の中に、指定パターンが何度発生するか数える
print( "abcabcabc".count("ab") )
#=> 3
# 検索する範囲も指定可能
print( "abcabcabc".count("ab", 0, 6) )
#=> 2
検索と置換(find, replace)
# findで指定文字の場所を検索
print( "abcdefg".find( "c" ) )
#=> 2
# 存在しない場合は、-1
print( "abcdefg".find( "z" ) )
#=> -1
# 検索範囲の指定も可能
print( "abcdefg".find( "c", 0, 5 ) )
#=> 2
# 文末方向から検索
print( "abcdefa".rfind( "a" ) )
#=> 6
# indexで指定文字の場所を検索
print( "abcdefg".index( "c" ) )
#=> 2
# 存在しない場合は、findと違ってErrorをRaise
print( "abcdefg".index( "z" ) )
#=> ValueError: substring not found
# 文末方向から検索
print( "abcdefa".rindex( "a" ) )
#=> 6
# 文頭が指定プりフィックスと一致するか
print( "abcdefg".startswith( "abc" ) )
#=> True
# 文頭にない場合は、文中に存在していてもFalse
print( "abcdefg".startswith( "bcd" ) )
#=> False
# 置換処理
print( "abcdefg".replace("de", "DE") )
#=> abcDEfg
# countを指定すると、指定した回数だけreplace
print( "aaaaaa".replace("a", "A", 3) )
#=> AAAaaa
文字列の大文字、小文字変換(upper, lower等)
# 先頭を大文字に(upperCase的なもの) print( "str".upper() ) #=> STR # 全角文字も対応 print( "aA".upper() ) #=> AA # 先頭を大文字に(lowerCase的なもの) print( "STR".lower() ) #=> str # 大文字を小文字に、小文字を大文字にswapする print( "AaAa".swapcase() ) #=> Hello,World # 先頭を大文字に print( "str".capitalize() ) #=> Str # 空白文字の後の英字を大文字に print( "hello world".title() ) #=> Hello World # 文字グループを判別しているそうなので、記号や全角文字の後も大文字になってしまう print( "abああcd'ef_gh".title() ) #=> AaああBb'Cc_Dd
空白の除去と空白埋め、ゼロ埋め、タブの空白変換(trim的なものやpad的なもの等)
# trim的なもの print( " str ".strip() ) #=> "str" # 左側のみtrim print( " str ".lstrip() ) #=> "str " # 右側のみtrim print( " str ".rstrip() ) #=> " str"
# 左寄せで指定文字に満たない分をスペース埋め print( "str".ljust(5) ) #=> "str " # 文字列が指定より長い場合は、文字列がそのまま返る print( "str".ljust(1) ) #=> "str" # 右寄せ版 print( "str".rjust(5) ) #=> " str" # 文字列を中央に設定して、左右をスペース埋め(余りは右側に付く) print( "str".center(6) ) #=> " str " # ゼロ埋め print( "10".zfill( 5 ) ) #=> 00010 # タブを空白に変換する(デフォルトでは空白8つに変換される) print( "A\tB".expandtabs() ) #=> A B # 引数で空白の数を指定可能 print( "A\tB".expandtabs(4) ) #=> A B
文字列を分割する(split等)
# 空白文字で区切ってlistに変換
print( "abc def ghi".split() )
#=> ['abc,', 'def,', 'ghi']
# 引数でカンマを指定して、カンマ区切りでlistに変換
print( "jkl,mno,pqr".split(",") )
#=> ['jkl', 'mno', 'pqr']
# 生成する要素の数を制限できる
print( "a,b,c,d,e,f,g".split(",", 3) )
#=> ['a', 'b', 'c', 'd,e,f,g']
# splitlinesを使って改行で区切る
print( "a\r\nb\rc\n".splitlines() )
#=> ['a', 'b', 'c']
# rsplitは、だいたいsplitと同じ振る舞い
print( "a b c d".rsplit() )
#=> ['a', 'b', 'c', 'd']
# 引数を2つ使用した場合に、右側からsplitしてることが分かる
print( "a b c d e f g".rsplit(" ", 3) )
#=> ['a b c d', 'e', 'f', 'g']
# joinを使用して、文字列をカンマで切ってみる
print( ",".join("str") )
#=> s,t,r
# partitionは3つのtupleを返す
print( "test=10".partition("=") )
#=> ('test', '=', '10')
# セパレータがない場合は、1つめの要素に全文字列が入る
print( "test=10".partition(",") )
#=> ('test=10', '', '')
# rpartitionはpartitionとだいたい同じ動き
print( "test=10".rpartition("=") )
#=> ('test', '=', '10')
# セパレータがない場合は、3つ目の要素に文字列が入る
print( "test=10".rpartition(",") )
#=> ('', '', 'test=10')
大文字小文字、数値、英字等の判別
strクラスの関数の、isnumericやisalphaについて。[a-z]や[a-z0-9]を判別するようなものではないので、注意。
# 数値判定(isdigit) print( "123".isdigit() ) #=> True # 空文字はFalse print( "".isdigit() ) #=> False # 数字以外が混入していてもアウト print( "1 2".isdigit() ) #=> False # 全角数字を通してみる(isdigit, isnumeric, isdecimal) print( "1".isnumeric() ) #=> True print( "2".isdigit() ) #=> True print( "3".isdecimal() ) #=> True # アラビア数字を通してみる(isdigit, isnumeric, isdecimal) print( "Ⅳ".isnumeric() ) #=> True print( "Ⅳ".isdigit() ) #=> False print( "Ⅳ".isdecimal() ) #=> False
# 英字判定、かと思ったら日本語もOK print( "AaZz".isalpha() ) #=> True # 空文字はFalse print( "".isalpha() ) #=> False # 英字以外が混入していてもFalse print( "A5A".isalpha() ) #=> False # 全角はTrueを返すようです print( "あ".isalpha() ) #=> True # 数字や記号が混じっていればFalse print( "あ1".isalpha() ) #=> False # 英数字判定(A-Za-z0-9みないなものではなく、いろいろ通します) print( "AaZz09".isalnum() ) #=> True # 空文字はFalse print( "".isalnum() ) #=> False # 英数字字以外が混入していてもFalse print( "A5?".isalnum() ) #=> False # isalphaと同じく、全角文字も通します print( "A1".isalnum() ) #=> True
# 空白を判定する print( " ".isspace() ) #=> True # 1文字でも空白以外があればアウト print( " a ".isspace() ) #=> False # 空文字もアウト print( "".isspace() ) #=> False # タブ、改行などはOK print( " \t\r\n ".isspace() ) #=> True
# 大文字判定 print( "AAA".isupper() ) #=> True # 1文字でも小文字があればアウト print( "AAa".isupper() ) #=> False # もちろん、日本語や記号のみ、空文字の場合はアウト print( "あいうえお".isupper() ) #=> False print( "?".isupper() ) #=> False print( "".isupper() ) #=> False # 但し、大文字+記号や大文字+日本語のような場合はTrue print( "Aです".isupper() ) #=> True print( "A?".isupper() ) #=> True # 小文字判定(細かいルールはisupperと同じ) print( "aaa".islower() ) #=> True

