Python は便利な文字列操作機能を備えており、文字列の結合、分割、置換、検索、フォーマットなど、さまざまな処理を効率的に行えます。この記事では、Python での基本的な文字列操作から、正規表現を用いた応用的な操作まで、具体的なコード例を交えながら解説します。
1. 文字列の基本操作
文字列の結合
複数の文字列を連結するには、+ 演算子または join() メソッドを使用します。
+ 演算子
+ 演算子を使用して、str1、スペース、str2 を結合し、combined_string に代入しています。
str1 = "Hello" str2 = "World" combined_string = str1 + " " + str2 # "+" 演算子で文字列を結合 print(combined_string) # 出力: Hello World
join() メソッド
join() メソッドは、リストなどのイテラブルなオブジェクトの要素を、指定した区切り文字で結合します。ここでは、スペースを区切り文字として words リストの要素を結合しています。
words = ["Hello", "World"] combined_string = " ".join(words) # リスト内の文字列をスペースで結合 print(combined_string) # 出力: Hello World
文字列の分割
文字列を指定した区切り文字で分割するには、split() メソッドを使用します。split() メソッドは、引数に指定された区切り文字で文字列を分割し、結果をリストとして返します。ここでは、"," を区切り文字として text を分割し、fruits リストに格納しています。
text = "apple,banana,orange" fruits = text.split(",") # "," で文字列を分割 print(fruits) # 出力: ['apple', 'banana', 'orange']
文字列の置換
文字列内の特定の部分を別の文字列に置き換えるには、replace() メソッドを使用します。replace() メソッドは、第一引数に指定された文字列を、第二引数に指定された文字列で置き換えます。ここでは、text 内の "World" を "Python" に置き換えた新しい文字列を new_text に代入しています。
text = "Hello World" new_text = text.replace("World", "Python") # "World" を "Python" に置換 print(new_text) # 出力: Hello Python
文字列の検索
文字列内に特定の文字列が含まれているかどうかを調べるには、find() メソッドまたは in 演算子を使用します。
find() メソッド
find() メソッドは、指定された文字列が最初に出現するインデックスを返します。見つからない場合は -1 を返します。
text = "Hello World" index = text.find("World") # "World" の開始位置を検索 print(index) # 出力: 6 (見つからない場合は -1)
in 演算子
in 演算子は、指定された文字列が対象の文字列に含まれているかどうかを真偽値 (True/False) で返します。
text = "Hello World" contains_world = "World" in text # "World" が含まれているか確認 print(contains_world) # 出力: True
大文字・小文字変換
文字列を大文字または小文字に変換するには、upper() メソッドまたは lower() メソッドを使用します。upper() は文字列をすべて大文字に、lower() はすべて小文字に変換します。
text = "Hello World" uppercase_text = text.upper() # 大文字に変換 lowercase_text = text.lower() # 小文字に変換 print(uppercase_text) # 出力: HELLO WORLD print(lowercase_text) # 出力: hello world
先頭・末尾の空白削除
文字列の先頭または末尾にある空白文字 (スペース、タブ、改行など) を削除するには、strip()、lstrip()、rstrip() メソッドを使用します。
strip(): 先頭と末尾の空白を削除lstrip(): 先頭の空白を削除rstrip(): 末尾の空白を削除
text = " Hello World " stripped_text = text.strip() # 先頭と末尾の空白を削除 left_stripped_text = text.lstrip() # 先頭の空白を削除 right_stripped_text = text.rstrip() # 末尾の空白を削除 print(stripped_text) # 出力: Hello World print(left_stripped_text) # 出力: Hello World print(right_stripped_text) # 出力: Hello World
文字列長取得
文字列の長さを取得するには、len() 関数を使用します。len() 関数は、文字列の文字数を返します。
text = "Hello World" length = len(text) # 文字列の長さを取得 print(length) # 出力: 11
文字列のスライス
文字列の一部を取得するには、スライスを使用します。スライスは、[開始インデックス:終了インデックス:ステップ] の形式で指定します。
- 開始インデックスを省略すると、最初から (0) が指定されたとみなされます。
- 終了インデックスを省略すると、最後まで (文字列の長さ) が指定されたとみなされます。
- ステップを省略すると、1 が指定されたとみなされます。
text = "Hello World" substring1 = text[0:5] # 最初の5文字を取得 (Hello) substring2 = text[6:] # 7文字目から最後までを取得 (World) substring3 = text[::2] # 1文字おきに取得 (HloWrd) print(substring1) # 出力: Hello print(substring2) # 出力: World print(substring3) # 出力: HloWrd
2. 文字列のフォーマット
文字列に変数の値を埋め込むには、format() メソッドまたは f-string を使用します。
format() メソッド
format() メソッドは、文字列内の {} プレースホルダーに変数の値を順番に埋め込みます。
name = "John" age = 30 formatted_string = "My name is {} and I am {} years old.".format(name, age) print(formatted_string) # 出力: My name is John and I am 30 years old.
f-string (フォーマット済み文字列リテラル)
f-string は、文字列の先頭に f を付け、文字列内の {} プレースホルダーに直接変数を記述できます。
name = "John" age = 30 formatted_string = f"My name is {name} and I am {age} years old." print(formatted_string) # 出力: My name is John and I am 30 years old.
3. 正規表現による文字列操作
より複雑なパターンマッチングや文字列操作を行うには、re モジュールを使用します。
import re # re モジュールをインポート text = "My phone number is 123-456-7890." # 電話番号のパターンを検索 match = re.search(r"(\d{3})-(\d{3})-(\d{4})", text) if match: print("Phone number found:", match.group(0)) # マッチ全体 print("Area code:", match.group(1)) # 最初のグループ (市外局番) print("Exchange number:", match.group(2)) # 2番目のグループ (市内局番) print("Subscriber number:", match.group(3)) # 3番目のグループ (加入者番号) # 出力: # Phone number found: 123-456-7890 # Area code: 123 # Exchange number: 456 # Subscriber number: 7890 # 電話番号を別の形式に置換 new_text = re.sub(r"(\d{3})-(\d{3})-(\d{4})", r"(\1) \2-\3", text) print(new_text) # 出力: My phone number is (123) 456-7890.
re.search():match.group():match.group(0)はマッチした文字列全体を返す。match.group(1)、match.group(2)、... は、正規表現内の各グループに対応する部分文字列を返す。
re.sub():
まとめ
今回紹介した文字列操作を下記の表にまとめました。簡易リファレンスとしてご利用ください。
| 操作 | メソッド/関数/演算子 | 説明 |
|---|---|---|
| 文字列の結合 | +, join() |
複数の文字列を連結します。 |
| 文字列の分割 | split() |
指定された区切り文字で文字列を分割し、リストとして返します。 |
| 文字列の置換 | replace() |
文字列内の指定された部分を別の文字列に置き換えます。 |
| 文字列の検索 | find(), in |
文字列内に特定の文字列が含まれているかどうかを調べます。find()はインデックス、inは真偽値を返します。 |
| 大文字・小文字変換 | upper(), lower() |
文字列を大文字または小文字に変換します。 |
| 先頭・末尾の空白削除 | strip(), lstrip(), rstrip() |
文字列の先頭、末尾、または両端の空白文字を削除します。 |
| 文字列長取得 | len() |
文字列の長さを取得します。 |
| 文字列のスライス | [] |
文字列の一部を取得します。 |
| 文字列のフォーマット | format(), f-string |
文字列に変数の値を埋め込みます。 |
| 正規表現による文字列操作 | re モジュール |
より複雑なパターンマッチングや文字列操作を行います。 |
[PR]