文字列の基礎
Pythonでは、文字列は不変(immutable)なシーケンス型であり、単一引用符(')、二重引用符(")、または三重引用符(''' または """)で定義できる。一度生成された文字列は直接変更できない。
文字列の定義方法
- 単一・二重引用符:
greeting = 'こんにちは' message = "Pythonへようこそ" - 三重引用符(複数行対応):
text = """これは 複数行にわたる 文字列です。"""
基本的な文字列操作
- 連結:
a = "Hello" b = "World" combined = a + " " + b # "Hello World" - 繰り返し:
echo = "OK" * 3 # "OKOKOK" - インデックスアクセス:
word = "Python" first_char = word[0] # 'P' - スライス:
part = word[2:5] # 'tho'
代表的な文字列メソッド
len(s):長さを取得length = len("Python") # 6s.upper()/s.lower():大文字・小文字変換"Py".upper() # "PY" "PY".lower() # "py"s.strip():前後の空白除去" test ".strip() # "test"s.replace(old, new):置換"Hi Earth!".replace("Earth", "Mars") # "Hi Mars!"s.split(sep):分割"a,b,c".split(",") # ['a', 'b', 'c']sep.join(iterable):結合"-".join(["x", "y", "z"]) # "x-y-z"s.find(sub):部分文字列の位置検索(見つからない場合は-1)"Hello".find("e") # 1s.count(sub):出現回数カウント"banana".count("a") # 3
文字列のフォーマット手法
- %形式(旧式):
"名前: %s, 年齢: %d" % ("Taro", 25) - .format()メソッド:
"名前: {}, 年齢: {}".format("Hanako", 30) - f-string(Python 3.6以降推奨):
name, age = "Jiro", 28 f"名前: {name}, 年齢: {age}"
エンコードとデコード
Unicode文字列とバイト列の相互変換にはencode()とdecode()を使用する:
# エンコード(str → bytes)
utf8_bytes = "日本語".encode('utf-8')
# デコード(bytes → str)
original = utf8_bytes.decode('utf-8')
正規表現による高度な処理(reモジュール)
- マッチ検索:
import re if re.search(r'\d+', "ID: 12345"): print("数字が含まれています") - 全一致抽出:
emails = re.findall(r'\w+@\w+\.\w+', "連絡先: a@example.com, b@test.org") # ['a@example.com', 'b@test.org'] - 置換:
cleaned = re.sub(r'\s+', ' ', " 複数 空白 ") # " 複数 空白 "
よくある課題と対処法
- エスケープ不要な複数行文字列:三重引用符を使用。
- 引用符のエスケープ:
s = '彼は"こんにちは"と言った。' - Unicodeの直接利用:Python 3ではデフォルトでUTF-8対応。
- 空白の正規化:必要に応じて
strip()や正規表現で処理。