Pythonで文字列を分割する方法:split, partition, 正規表現の使い分け

 

split()メソッドによる基本的な分割

デフォルト(空白文字による分割)

text = "Python Java C++ JavaScript"
words = text.split()
print(words)  # ['Python', 'Java', 'C++', 'JavaScript']

特定の区切り文字による分割

csv_data = "りんご,バナナ,オレンジ"
fruits = csv_data.split(",")
print(fruits)  # ['りんご', 'バナナ', 'オレンジ']

分割回数の制限

text = "one-two-three-four"
parts = text.split("-", 2)  # 最大2回分割
print(parts)  # ['one', 'two', 'three-four']

改行による分割

splitlines()メソッド

multiline = """行1
行2
行3"""
lines = multiline.splitlines()
print(lines)  # ['行1', '行2', '行3']

改行文字を保持した分割

multiline = "行1\n行2\r\n行3"
lines = multiline.splitlines(keepends=True)
print(lines)  # ['行1\n', '行2\r\n', '行3']

partition()とrpartition()

最初の区切り文字で分割

email = "user@example.com"
local, sep, domain = email.partition("@")
print(f"ローカル部: {local}")  # user
print(f"区切り文字: {sep}")   # @
print(f"ドメイン部: {domain}") # example.com

最後の区切り文字で分割

filepath = "/home/user/documents/file.txt"
path, sep, filename = filepath.rpartition("/")
print(f"パス: {path}")      # /home/user/documents
print(f"ファイル名: {filename}")  # file.txt

正規表現による分割

re.split()の基本的な使い方

import re

text = "apple,banana;orange:grape"
# 複数の区切り文字で分割
fruits = re.split(r'[,;:]', text)
print(fruits)  # ['apple', 'banana', 'orange', 'grape']

空白文字の正規化分割

import re

text = "  Python   Java    C++  "
words = re.split(r'\s+', text.strip())
print(words)  # ['Python', 'Java', 'C++']

キャプチャグループを使った分割

import re

text = "word1-word2_word3"
# 区切り文字も保持
parts = re.split(r'([-_])', text)
print(parts)  # ['word1', '-', 'word2', '_', 'word3']

文字数による分割

固定長での分割

def split_by_length(text, length):
    return  for i in range(0, len(text), length)]

text = "abcdefghijklmnop"
chunks = split_by_length(text, 4)
print(chunks)  # ['abcd', 'efgh', 'ijkl', 'mnop']

日本語テキストの文字数分割

japanese_text = "こんにちは、世界!"
chars = list(japanese_text)
print(chars)  # ['こ', 'ん', 'に', 'ち', 'は', '、', '世', '界', '!']

実用的な活用例

CSVデータの解析

csv_line = "田中,30,エンジニア,東京"
name, age, job, city = csv_line.split(",")
print(f"名前: {name}, 年齢: {age}, 職業: {job}, 住所: {city}")

URLの分解

from urllib.parse import urlparse

url = "https://www.example.com/path/to/page?param=value"
parsed = urlparse(url)
print(f"スキーム: {parsed.scheme}")
print(f"ホスト: {parsed.netloc}")
print(f"パス: {parsed.path}")

ログファイルの解析

import re

log_line = "2024-08-06 12:30:45 INFO User login successful"
# 日付、時刻、レベル、メッセージに分割
pattern = r'(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2}) (\w+) (.+)'
match = re.match(pattern, log_line)

if match:
    date, time, level, message = match.groups()
    print(f"日付: {date}, 時刻: {time}, レベル: {level}")

単語の頻度解析

import re
from collections import Counter

text = "Python is great. Python is powerful. Python is easy."
# 単語に分割(句読点を除去)
words = re.findall(r'\b\w+\b', text.lower())
word_count = Counter(words)
print(word_count)

空の要素を除外する分割

text = "apple,,banana,,orange"
# 空の要素を含む分割
parts1 = text.split(",")
print(parts1)  # ['apple', '', 'banana', '', 'orange']

# 空の要素を除外
parts2 = [part for part in text.split(",") if part]
print(parts2)  # ['apple', 'banana', 'orange']

エラーハンドリング

def safe_split(text, delimiter, expected_parts=None):
    parts = text.split(delimiter)
    if expected_parts and len(parts) != expected_parts:
        raise ValueError(f"期待される部品数: {expected_parts}, 実際: {len(parts)}")
    return parts

try:
    name, age = safe_split("田中,30,エンジニア", ",", 2)
except ValueError as e:
    print(f"エラー: {e}")

まとめ

Pythonの文字列分割は用途に応じて適切なメソッドを選択することが重要です:

  • 基本的な分割:split()
  • 改行分割:splitlines()
  • 3分割:partition()/rpartition()
  • 複雑なパターン:re.split()

これらを適切に使い分けることで、効率的な文字列処理が可能になります。

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座