文字列(主に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