LoginSignup
171
159

More than 3 years have passed since last update.

Python3の文字列操作

Last updated at Posted at 2018-01-30

今回はPython3に置いての簡単な文字列操作について紹介したいと思います.

まず,文字列は「"(ダブルクォーテーション)」もしくは「'(シングルクォーテーション)」で囲んで表現しています.
例えば「Hello World」を表示したい場合(今回はメッセージを変数msgに入れます)はmsg = "Hello World"と書き換えて表示します.また,メッセージを表示するためにprintを使います.それから文字列の中では特殊文字を使うことができて,いくつかあるのですが「\n」で改行,「\t」がタブになります.

文字列に値を埋め込み

埋め込みを大きく分けて2つの方法があります.

まず1つ目の方法ですが,次のmoji_01.pyを見てください.
まず埋め込みたい値を文字列の中で「%」付きで表現していきます.
そのとき,値が入れたい場合は「%s」,浮動小数点数の場合は「%f」,整数の場合は「%d」を使います.
その後に「%」と書いてあげて,埋め込みたい値をこのように書いてあげればOKです.

2つ目の方法は,「%」の部分を {0},{1} としてあげて,その後に .format(name, score) と書いてあげます.こちらの 0 番目の要素が {0} に, 1 番目の要素が {1} に埋め込まれます.
使用方法は次のプログラムを見てください.

moji_01.py
name = "guest"
score = 52.8

# 1つ目の方法
print("name: %s, score: %f" % (name, score))
## => name: guest, score: 52.800000

# 2つ目の方法
print("name: {0}, score: {1}".format(name, score))
# => name: guest, score: 52.8

# 中身省略してもOK,そのときformatの中の順番で代入される
print("name:{},score:{}".format(name, score))
## => name: guest, score: 52.8

文字列の結合

2つの文字列の結合して,1つの文字列にするとき,「+」を使います.
joinメソッドとリスト/タプルを使って連結するテクニックもあります.
また,同じ内容を繰り返す場合は*演算子で整数を与えると指定した回数だけリピートした文字列が生成されます.
使用方法は次のプログラムを見てください.

moji_02.py
word_1 = "Gu"
word_2 = "est"

# 「+」使用
print(word_1 + word_2) ## => Guest

# 「join」使用
words = ["Hello", "World", "!"]
print(" ".join(words)) ## => Hello World !

# 「*」使用
word_3 = "Hello "
print(word_3 * 3) ## => Hello Hello Hello 

文字列の分割

指定の文字列に対して,区切り文字で分割したリストを返します.
分割数はオプションで,分割する回数を制限できます.分割数は省略することができます.
splitは左から分割を行うことができます.また,rsplitは右から分割することができます.
使用方法は次のプログラムを見てください.

moji_03.py
phrase = "If you can dream it you can do it"
# 「split」使用 .split(区切り文字, 分割数)
print(phrase.split()) ## => ["If","you","can","dream","it","you","can","do","it"]

word = "HelloWorld"
# 「rsplit」使用 .rsplit(区切り文字, 分割数)
print(word.rsplit("l",1)) ## => ['HelloWor', 'd']

文字列の切り出し

文字列オブジェクト[開始インデックス:終了インデックス]開始インデックスと終了インデックスをコロン(:)でつなげて指定します.
使用方法は次のプログラムを見てください.

moji_04.py
word = "ABCDE"
print(word[1:3]) ## => BC
print(word[2:]) ## => CDE
print(word[:3]) ## => ABC
print(word[:]) ## => ABCDE

また,開始インデックスや終了インデックスをマイナス「-」つけることができます.ぜひ試してみて下さい.

文字列の置換

.replace(置換される文字列, 置換する文字列, 置換回数)を使用すると,指定の文字列を置換することができます.
置換回数はオプションで,置換する回数を指定できます.置換回数を指定しない場合は,全て置換されます.
使用方法は次のプログラムを見てください.

moji_05.py
word = "ABCABCABC"
# 指定文字列を置換する
print(word.replace("ABC", "X")) ## => XXX

# 置換回数を1回にして指定文字列を置換する
print(word.replace("ABC", "X", 1)) ## => XABCABC

文字列の削除

.strip(削除する文字列)を使用すると,文字列から特定の文字を削除できます.
stripは両端.他に,lstripは左端,rstripは右端の文字列を削除します.
使用方法は次のプログラムを見てください.

moji_06.py
word = "ABCABCA"
# stripで両端の削除
print(word.strip("A")) ## => BCABC

# lstripで左端の削除
print(word.lstrip("A")) ## => BCABCA

# rstripで右端の削除
print(word.rstrip("A")) ## => ABCABC

文字列の検索

検索する文字列 in 検索対象の文字列を使用すると,指定の文字列が含まれているかを調べることができます.
検索対象の文字列の中に,検索する文字列が存在すれば,True.存在しないならば,False.
使用方法は次のプログラムを見てください.

moji_07.py
word = "ABCABCA"
# 存在する場合
print("ABC" in word) ## => True

# 存在しない場合
print("E" in word) ## => False

上の方法以外は,.find(検索する文字列, 開始位置, 終了位置)を使う方法もあります.こちらの方がよく使われます.
findは文字列の左端から検索するのに対し,rfindは文字列の右端から検索します.
こちらの方は,開始位置と終了位置を指定することによって,検索範囲を指定することができます.
使用方法は次のプログラムを見てください.

moji_07.py
word = "ABCABCA"
# find
print(word.find("A")) ## => 0
print(word.find("B",2, 6)) ## => 4

# rfind
print(word.rfind("A")) ## => 6
print(word.find("B",2, 6)) ## => 6

# 検索した文字列が見つからない場合
print(word.find("D")) ## => -1

文字列比較(==演算子とis演算子)

文字列同士の比較に"=="という比較演算子を使用し,左右の文字列が一致する場合はTrue,異なる場合はFalseを返します.
文字列同士が異なる場合にTrueを返したい場合は,"!="という比較演算子を使います.
文字列の比較演算子として"=="の他にis演算子があります.
※ 文字列が同じ値かどうかを調べる場合は"=="を使い,is演算子は使用しないようにしましょう.
is演算子の利用が推奨される場面はNoneと比較する場合です.
メリットとして"=="と比べてis演算子の方が比較処理の速度が早いです.

moji_08.py
word = "abcd"
# 一致する場合
print(word == "abcd") ## => True

# 異なる場合
print(word == "abce") ## => False

幅寄せ

moji_09.py
word = "ABCabc"
# 左寄せ 「.ljust」
print(word.ljust(10)) ## => "ABCabc    "

# 右寄せ 「.rjust」
print(word.rjust(10)) ## => "    ABCabc"

# 中央寄せ 「.center」
print(word.center(10)) ## => "  ABCabc  "

# 0で埋めて左寄せ 「.zfill」
print(word.zfill(10)) ## => "0000ABCabc"

大文字と小文字の置き換え

moji_10.py
word = "ABCabc"
# 全て大文字にする 「.upper」
print(word.upper()) ## => ABCABC

# 全て小文字にする 「.lower」
print(word.lower()) ## => abcabc

# 大文字と小文字を入れ替える 「.swapcase」
print(word.swapcase()) ## => abcABC

# 先頭を大文字、その他を小文字にする 「.capitalize」
print(word.capitalize()) ## => Abcabc

文字列が特定な文字だけであるか

moji_11.py
word = "ABCabc"
# 英数字だけか 「.isalnum」
print(word.isalnum()) ## => True

# 英字だけか 「.isalpha」
print(word.isalpha()) ## => True

# 数字だけか 「.isdigit」
print("123".isdigit()) ## => True
print(word.isdigit()) ## => False

# 空白文字だけか 「.isspace」
print("  \n\t\r".isspace()) ## => True
print(word.isspace()) ## => False

文字列の先頭または末尾が特定な文字であるか

moji_12.py
word = "ABCabc"
# Aで始まるかを調べる
print(word.startswith("A")) ## => True

# Aで終わるかを調べる
print(word.endswith("A")) ## => False

参考サイト

ひきメモ: http://d.hatena.ne.jp/yumimue/20071223/1198407682

171
159
6

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
171
159