Pythonにおける文字列操作の基本と実用テクニック

文字列の基礎

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")  # 6
  • s.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")  # 1
  • s.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()や正規表現で処理。

タグ: Python 文字列操作 f-string 正規表現 エンコーディング

5月18日 10:09 投稿