この記事では、Pythonの文字列の使い方について解説します。
Pythonには、文字列を扱うためのstr
型というデータ型が用意されています。str
型は、シーケンス型の一種で「テキストシーケンス型」とも呼ばれます。
シーケンス型については以下の記事を参照してください。
Linkシーケンスの使い方と特徴を解説
それでは、文字列の使い方を見ていきましょう!
文字列の基本
文字列は、シングルクォーテーション('
)、またはダブルクォーテーション("
)で囲むことで表現することができます。
s = ''
s = ""
文字列型のコンストラクタstr()
を使っても生成できます。
s = str()
クォーテーションの間に文字を記述することで初期値を指定できます。
s = '文字列'
s = "文字列"
クォーテーション3つで囲むことで複数行に渡って文字列を記述できます。
s = '''文字列
です'''
s = """文字列
です"""
また、文字列には値を埋め込むこともできます。
name = '田中太郎'
age = 20
s = f'名前: {name}、 年齢: {age}'
値の埋め込みについては以下の記事を参照してください。
Link文字列リテラルについて解説します
文字列を表現するにはクォーテーションを使うことがわかりました。
文字列の演算
Pythonの文字列型には以下の3つの演算が用意されています。
- 連結(+)
- 繰り返し(*)
- 含まれるかどうか(in)
連結
文字列同士を+
演算子で連結させることができます。
text1 = '昔はお前のような冒険者だったが、'
text2 = '膝に矢を受けてしまってな...。'
# 連結(文字列 + 文字列)
print(text1 + text2)
実行結果
昔はお前のような冒険者だったが、膝に矢を受けてしまってな...。
繰り返し
*
演算子を使うことで指定した整数の数だけ繰り返した文字列が生成されます。
text = 'Hello'
# 繰り返し(文字列 * 整数)
print(text * 3)
実行結果
HelloHelloHello
含まれるかどうか
in
演算子を使うことで左辺の文字列が右辺の文字列に含まれているか判定することができます。含まれていればTrue
、含まれていなければFalse
が返されます。
text = 'アイザック,グレゴリー,マルコ,ミゲル,ウォーリー,マシュー'
# 含まれるかどうか (検索したい文字 in 文字列)
print('ウォーリー' in text)
print('マイク' in text)
実行結果
True
False
文字列に変換:str()
str()
の引数に他の型のオブジェクトを指定することで文字列に変換できます。
str(オブジェクト)
以下のコードでは、int
型の値から文字列を生成し、+
演算子で連結しています。
year = 199
text = 'X年、世界は核の炎に包まれた!'
print(str(year) + text)
実行結果
199X年、世界は核の炎に包まれた!
文字列型のメソッド
str
型には便利なメソッドがたくさん実装されています。ここでは、その中でもよく使うメソッドを紹介します。
任意の文字で置換する:replace()
replace()
メソッドを使うことで指定した文字を置換できます。
str.replace(old, new[, count])
- 文字列中の全ての
old
引数をnew
引数で置換した文字列を新たに生成して返す - オプション引数の
count
引数を指定することで先頭からいくつ置換するかを指定できる。省略した場合は、当てはまる文字すべてを置換する
以下のコードでは、「ヤムチャ」を「クリリン」に変換した文字列を生成しています。
text = 'ヤムチャのことか--!!'
replace_text = text.replace('ヤムチャ', 'クリリン')
print(text)
print(replace_text)
実行結果
ヤムチャのことか--!!
クリリンのことか--!!
デフォルトでは、条件に当てはまる全ての文字を置換するので注意しましょう。
text = "いっぱい"
print(text.replace('い', 'お'))
実行結果
おっぱお
任意の文字で分割する:split()
split()
メソッドを使うことで指定した文字で文字列を分割できます。
str.split(sep=None, maxsplit=-1)
sep
引数に指定した文字列で区切ったリストを返すsep
引数がNone
の場合は空白文字で分割するmaxsplit
引数を指定することで最大分割回数を指定できる。マイナスの値が指定された場合は分割できる箇所をすべて分割する
以下のコードでは、/
で文字列を分割します。
demon_slayer = '炭治郎/禰豆子/善逸/伊之助'
print(demon_slayer.split('/'))
実行結果
['炭治郎', '禰豆子', '善逸', '伊之助']
先頭・末尾の文字が任意の文字と一致するか:startswith()、endswith()
startswith()
メソッドは先頭が、endswith()
メソッドは末尾が任意の文字と一致するか判定することができます。
# 先頭
str.startswith(prefix[, start[, end]])
# 末尾
str.endswith(suffix[, start[, end]])
以下はstartswith()
メソッドの説明ですが、endswith()
メソッドも使い方は同じです。引数名と末尾を判定することが異なるので注意してください。
- 先頭の文字が
prefix
引数と一致するかどうかを判定する prefix
引数にはタプルで複数の文字を指定することもできる- オプション引数でどこから(
start
)どこまで(end
)を検索するか指定できる
以下の例では、文字列がHTMLの見出しかどうかを判定しています。
midasi1 = '<h2>驚愕!アプリでダイエット!?一ヶ月で30kg落とす方法とは!?</h2>'
text = '<p>ウンタラカンタラ大学で『努力0!』『費用0!』で痩せる方法が発見されたのを知っていますか?</p>'
midasi2 = '<h3>ポイントは食事を取らないこと</h3>'
midasi = ('<h2>', '<h3>')
print(midasi1.startswith(midasi))
print(text.startswith(midasi))
print(midasi2.startswith(midasi))
print()
midasi = ('</h2>', '</h3>')
print(midasi1.endswith(midasi))
print(text.endswith(midasi))
print(midasi2.endswith(midasi))
実行結果
True
False
True
True
False
True
大文字・小文字にする:upper()・lower()
upper()
メソッドで大文字、lower()
メソッドで小文字にすることができます。大文字・小文字が無い文字に使用しても意味はありません。
text = 'Umbrella'
print(text.upper())
print(text.lower())
実行結果
UMBRELLA
umbrella
先頭・末尾の文字の削除:lstrip()・rstrip()
lstrip()
メソッドは先頭から、rstrip()
メソッドは末尾から文字を削除できます。
# 先頭から削除
str.lstrip([chars])
# 末尾から削除
str.rstrip([chars])
chars
引数に指定された文字が削除されたコピーを返すchars
引数には、除去される文字の集合を指定できるchars
引数が省略されるかNone
を指定された場合は「空白文字」が削除される
試しに先頭、または末尾の文字を削除してみます。
s = 'オレのターン!ドロー!'
print(s.lstrip('オレの'))
# 文字の並びは関係ない
print(s.lstrip('レのオ'))
実行結果
ターン!ドロー!
ターン!ドロー!
引数に何も指定しなければ連続している全ての空白が削除されます。
text = ' ソラシロ: '
race = 'イマニティ'
# 通常
print(text + race)
# 先頭の空白の削除
print(text.lstrip() + race)
# 末尾の空白の削除
print(text.rstrip() + race)
# 先頭・末尾の空白の削除
print(text.lstrip().rstrip() + race)
実行結果
ソラシロ: イマニティ
ソラシロ: イマニティ
ソラシロ:イマニティ
ソラシロ:イマニティ
その他の使い方
文字列にはその他にも以下のような処理が可能です。
- 文字列が識別子として使用できるか判定する方法
- 文字列のプレフィックス(接頭辞)とサフィックス(接尾辞)を削除する
- 大文字・小文字を区別せずに文字列を比較する方法
- 文字列に値を埋め込む
- 文字列を分割する方法
- 長すぎる文字列を分割したり、折り返ししたり、切り詰めたりする方法
まとめ
この記事では、Pythonの文字列の使い方を解説しました。
文字列はよく使用されるデータ型なのでメソッドなども充実しています。しかし、まとめて覚えるのは大変なので忘れてしまったらその都度確認してくださいね!
それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ