Pythonは初心者にも扱いやすいプログラミング言語として知られており、そのなかでも「文字列操作」は非常によく使われる基本機能です。
本記事では、文字列の基礎から便利なメソッド、さらには実践的なサンプルコードまでを解説します。
最後には学んだ内容を振り返る演習問題と、その解答例もご用意しました。
文字列の基本
文字列リテラル
Pythonでは文字列をシングルクォート(’…’)またはダブルクォート(”…”)で囲って表現します。
a = 'こんにちは'
b = "Python"
エスケープシーケンス
改行やタブなどはエスケープシーケンスで表現します。
- \n:改行
- \t:タブ
- \\:バックスラッシュ自体
text = "Hello\nWorld\t!"
print(text)
# 出力:
# Hello
# World !
文字列の連結・繰り返し・長さ
- 連結(Concatenation):+ 演算子
- 繰り返し(Repetition):* 演算子
- 長さ(Length):len() 関数
s1 = "Hello"
s2 = "World"
print(s1 + " " + s2) # Hello World
print("ha" * 3) # hahaha
print(len("Python")) # 6
インデックスとスライス
文字列は0から始まるインデックスでアクセスできます。また、スライスで部分文字列を取り出せます。
s = "Python"
# インデックス
print(s[0]) # 'P'
print(s[-1]) # 'n'
# スライス
print(s[1:4]) # 'yth' (インデックス1以上4未満)
print(s[:3]) # 'Pyt'
print(s[3:]) # 'hon'
print(s[:]) # 'Python'(全体)
文字列メソッド
Pythonの文字列型には便利な組み込みメソッドが多数あります。
大文字・小文字変換
- upper():全て大文字に
- lower():全て小文字に
- title():単語の先頭を大文字に
s = "python programming"
print(s.upper()) # 'PYTHON PROGRAMMING'
print(s.title()) # 'Python Programming'
余白の削除
- strip():前後の空白を削除
- lstrip():左側の空白を削除
- rstrip():右側の空白を削除
s = " hello "
print(s.strip()) # 'hello'
検索
find(sub)は、部分文字列が最初に現れる位置を返します。なければ-1です。
index(sub)は、部分文字列がなければValueErrorを投げます。
s = "Hello World"
print(s.find("o")) # 4
print(s.find("x")) # -1
置換
replace(old, new[, count])は、指定回数だけ置換します。
s = "banana"
print(s.replace("a", "o", 2)) # 'bonono'
分割・結合
split(sep=None, maxsplit=-1)は、文字列をリストに分割します。
join(iterable)は、リストなどを文字列に結合します。
s = "red,green,blue"
colors = s.split(",") # ['red', 'green', 'blue']
joined = "-".join(colors) # 'red-green-blue'
その他の便利メソッド
capitalize()は、先頭を大文字にし、残りを小文字にします。
s = "hELLo"
print(s.capitalize()) # 'Hello'
islower()は、文字列が全て小文字かどうかを判定します。
print("hello".islower()) # True
print("Hello".islower()) # False
文字列のフォーマット
f文字列(Python 3.6+)
変数を {} の中に直接埋め込み。式も可。
name = "Alice"
age = 30
print(f"{name}さんは{age}歳です。")
str.format()
print("{}は{}歳".format("Bob", 25))
print("{1}が先、{0}が後".format("後", "先"))
パーセント書式
name = "Charlie"
score = 95.5
print("%sの得点は%.1f点" % (name, score))
実践サンプル
メールアドレスのドメイン抽出
def get_domain(email):
# @以降を取得
return email.split("@")[-1]
print(get_domain("user@example.com")) # example.com
全角→半角変換(例)
# 簡易例: str.translateを使う方法
zenkaku = "ABC123"
hankaku = zenkaku.translate(str.maketrans(
"ABC123", "ABC123"))
print(hankaku) # ABC123
演習問題
- スライス応用
文字列 s = “Programming” の先頭3文字と末尾3文字を組み合わせて出力する関数を作成せよ。 - 検索と置換
文字列 text = “2025/06/21” を年月日それぞれ 年、月、日 の文字を含む形式 “2025年6月21日” に変換する関数を作成せよ。 - フォーマット練習
名前と得点を引数に取り、”Aliceさんの点数は90点です。” のように出力する関数を3種類(f文字列、format()、パーセント書式)で作成せよ。 - 応用①:パス文字列処理
ファイルパス “/home/user/data/file.txt” から拡張子(txt)のみを取り出す関数を実装せよ。 - 応用②:文字カウント
任意の文字列と文字を引数に取り、その文字が文字列中にいくつ登場するかを返す関数を作成せよ。
解答例
# 1. 先頭3文字と末尾3文字
def slice_ends(s):
return s[:3] + s[-3:]
print(slice_ends("Programming")) # Proing
# 2. 日付フォーマット変換
def format_date(text):
y, m, d = text.split("/")
return f"{int(y)}年{int(m)}月{int(d)}日"
print(format_date("2025/06/21")) # 2025年6月21日
# 3. フォーマット3種
def f_string(name, score):
return f"{name}さんの点数は{score}点です。"
def format_method(name, score):
return "{}さんの点数は{}点です。".format(name, score)
def percent_format(name, score):
return "%sさんの点数は%d点です。" % (name, score)
print(f_string("Alice", 90))
print(format_method("Bob", 85))
print(percent_format("Charlie", 95))
# 4. 拡張子取得
def get_ext(path):
return path.split(".")[-1]
print(get_ext("/home/user/data/file.txt")) # txt
# 5. 文字カウント
def count_char(s, ch):
return s.count(ch)
print(count_char("abracadabra", "a")) # 5
まとめ
本記事では、Pythonの文字列操作の基本から応用までを幅広く紹介しました。
文字列は多くのプログラムで必須となる要素ですので、ぜひ演習問題に取り組んで理解を深めてください。
これらのスキルを身につけることで、データの前処理やユーザーからの入力処理など、多くの場面で役立つことでしょう。
今後もさらなる発展編として、正規表現(reモジュール)による高度な文字列操作や、日本語特有の文字エンコーディングなどを学ぶことで、より柔軟なテキスト処理が可能になります。ぜひチャレンジしてみてください!