文字列(主に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
戻る    ご意見、ご要望