[Python] 文字列を変換する方法まとめ【数値変換/文字列置換/正規表現】
Pythonで文字列を変換する方法は多岐にわたります。
数値変換にはint()
やfloat()
を使用し、文字列を整数や浮動小数点数に変換できます。
文字列置換にはstr.replace()
を使い、指定した文字列を別の文字列に置き換えます。
正規表現を使った変換にはre.sub()
が便利で、パターンに一致する部分を置換できます。
正規表現を使う際は、import re
が必要です。
文字列を数値に変換する方法
文字列を数値に変換することは、データ処理や計算を行う上で非常に重要です。
ここでは、Pythonでの数値変換の方法を詳しく解説します。
int()を使った整数変換
int()関数
を使用すると、文字列を整数に変換できます。
文字列が整数形式である必要があります。
例えば、次のように使用します。
# 文字列を整数に変換
string_number = "123"
integer_number = int(string_number)
print(integer_number) # 出力: 123
123
float()を使った浮動小数点数変換
float()関数
を使うことで、文字列を浮動小数点数に変換できます。
小数点を含む文字列を扱う際に便利です。
以下の例を見てみましょう。
# 文字列を浮動小数点数に変換
string_float = "123.45"
float_number = float(string_float)
print(float_number) # 出力: 123.45
123.45
str()を使った数値から文字列への変換
数値を文字列に変換するには、str()関数
を使用します。
これにより、数値を文字列として扱うことができます。
# 数値を文字列に変換
number = 456
string_number = str(number)
print(string_number) # 出力: '456'
'456'
hex()やbin()を使った進数変換
hex()関数
やbin()関数
を使うことで、整数をそれぞれ16進数や2進数に変換できます。
以下の例を見てみましょう。
# 整数を16進数に変換
integer_value = 255
hex_value = hex(integer_value)
print(hex_value) # 出力: '0xff'
# 整数を2進数に変換
bin_value = bin(integer_value)
print(bin_value) # 出力: '0b11111111'
0xff
0b11111111
例外処理を使った安全な変換方法 (try-except)
文字列を数値に変換する際、無効な文字列が含まれているとエラーが発生します。
try-except
を使ってエラーを処理する方法を見てみましょう。
# 安全に文字列を整数に変換
string_value = "abc" # 無効な文字列
try:
number = int(string_value)
print(number)
except ValueError:
print("無効な文字列です。整数に変換できません。")
無効な文字列です。整数に変換できません。
このように、try-except
を使うことで、エラーが発生した場合でもプログラムがクラッシュすることを防げます。
文字列を置換する方法
文字列の置換は、データの整形やクリーニングにおいて非常に重要な操作です。
ここでは、Pythonでの文字列置換の方法を詳しく解説します。
str.replace()を使った基本的な置換
str.replace()メソッド
を使用すると、指定した文字列を別の文字列に置換できます。
基本的な使い方は以下の通りです。
# 文字列の置換
original_string = "こんにちは、世界!"
replaced_string = original_string.replace("世界", "Python")
print(replaced_string) # 出力: こんにちは、Python!
こんにちは、Python!
str.translate()を使った複数文字の一括置換
str.translate()メソッド
を使うと、複数の文字を一度に置換できます。
これには、変換テーブルが必要です。
以下の例を見てみましょう。
# 複数文字の一括置換
original_string = "abcde"
translation_table = str.maketrans("abc", "123")
translated_string = original_string.translate(translation_table)
print(translated_string) # 出力: 123de
123de
str.maketrans()を使った変換テーブルの作成
str.maketrans()
を使用して、文字の変換テーブルを作成できます。
このテーブルをstr.translate()
と組み合わせて使用します。
# 変換テーブルの作成
translation_table = str.maketrans("aeiou", "12345")
original_string = "hello world"
translated_string = original_string.translate(translation_table)
print(translated_string) # 出力: h2ll4 w4rld
h2ll4 w4rld
置換時の大文字・小文字の区別
str.replace()
やstr.translate()
は、大文字と小文字を区別します。
これを考慮して置換を行う必要があります。
以下の例を見てみましょう。
# 大文字・小文字を区別した置換
original_string = "Hello World"
replaced_string = original_string.replace("world", "Python")
print(replaced_string) # 出力: Hello World
Hello World
この場合、”world”は大文字で始まっていないため、置換されません。
文字列の一部だけを置換する方法 (count引数)
str.replace()メソッド
には、置換する回数を指定するcount
引数があります。
これを使うことで、特定の回数だけ置換を行うことができます。
# 一部だけを置換
original_string = "apple apple apple"
replaced_string = original_string.replace("apple", "orange", 2)
print(replaced_string) # 出力: orange orange apple
orange orange apple
この例では、最初の2つの”apple”だけが”orange”に置換されました。
正規表現を使った文字列操作
正規表現は、文字列のパターンを定義し、検索や置換を行うための強力なツールです。
ここでは、Pythonにおける正規表現の基本的な使い方を解説します。
re.sub()を使ったパターンマッチングと置換
re.sub()関数
を使用すると、正規表現にマッチする部分を置換できます。
以下の例では、数字を”X”に置換しています。
import re
# 正規表現を使った置換
original_string = "電話番号は123-456-7890です。"
replaced_string = re.sub(r'\d+', 'X', original_string)
print(replaced_string) # 出力: 電話番号はX-X-Xです。
電話番号はX-X-Xです。
re.match()とre.search()の違い
re.match()
は文字列の先頭でパターンがマッチするかを確認し、re.search()
は文字列全体を検索してパターンがマッチするかを確認します。
以下の例でその違いを見てみましょう。
import re
# matchの例
result_match = re.match(r'\d+', '123abc')
print(result_match.group()) # 出力: 123
# searchの例
result_search = re.search(r'\d+', 'abc123')
print(result_search.group()) # 出力: 123
123
123
正規表現の基本的なパターン
正規表現では、特定の文字やパターンを表現するためのシンボルがいくつかあります。
以下は基本的なパターンの例です。
パターン | 説明 |
---|---|
. | 任意の1文字 |
\d | 数字(0-9) |
\D | 非数字 |
\w | 単語文字(アルファベット、数字、アンダースコア) |
\s | 空白文字 |
* | 直前の文字が0回以上繰り返す |
+ | 直前の文字が1回以上繰り返す |
? | 直前の文字が0回または1回出現する |
正規表現を使った複雑な置換
正規表現を使うことで、より複雑なパターンに基づいた置換が可能です。
以下の例では、メールアドレスのドメイン部分を”example.com”に置換しています。
import re
# 複雑な置換
original_string = "私のメールは user@domain.com です。"
replaced_string = re.sub(r'@[\w.-]+', '@example.com', original_string)
print(replaced_string) # 出力: 私のメールは user@example.com です。
私のメールは user@example.com です。
正規表現のフラグオプション (re.IGNORECASEなど)
正規表現には、検索の挙動を変更するためのフラグオプションがあります。
re.IGNORECASE
を使用すると、大文字と小文字を区別せずにマッチングを行います。
以下の例を見てみましょう。
import re
# 大文字・小文字を区別しない検索
original_string = "Hello World"
result = re.search(r'hello', original_string, re.IGNORECASE)
print(result.group()) # 出力: Hello
Hello
このように、フラグオプションを使うことで、より柔軟な検索が可能になります。
応用例:文字列変換の実践
文字列変換は、データ処理や分析において非常に重要な役割を果たします。
ここでは、実際の応用例を通じて、文字列変換の具体的な方法を解説します。
数値を含む文字列の一括変換
数値を含む文字列を一括で変換する場合、正規表現を使用すると便利です。
以下の例では、文字列内のすべての数値を”X”に置換しています。
import re
# 数値を含む文字列の一括変換
original_string = "価格は1000円、2000円、3000円です。"
replaced_string = re.sub(r'\d+', 'X', original_string)
print(replaced_string) # 出力: 価格はX円、X円、X円です。
価格はX円、X円、X円です。
特定のパターンに基づくデータクリーニング
データクリーニングでは、特定のパターンに基づいて不要な文字を削除することがよくあります。
以下の例では、電話番号の形式を整えています。
import re
# 電話番号のクリーニング
original_string = "電話番号: 090-1234-5678, 03-9876-5432"
cleaned_string = re.sub(r'(\d{2,4})-(\d{2,4})-(\d{4})', r'\1\2\3', original_string)
print(cleaned_string) # 出力: 電話番号: 09012345678, 0398765432
電話番号: 09012345678, 0398765432
ファイル内の文字列を一括置換する方法
ファイル内の文字列を一括で置換するには、ファイルを読み込み、内容を置換してから再度書き込む必要があります。
以下の例では、テキストファイル内の特定の単語を置換しています。
# ファイル内の文字列を一括置換
file_path = 'sample.txt'
# ファイルを読み込む
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
# 文字列を置換
new_content = content.replace('古い', '新しい')
# ファイルに書き込む
with open(file_path, 'w', encoding='utf-8') as file:
file.write(new_content)
このコードは、sample.txt
内の”古い”という単語を”新しい”に置換します。
URLやメールアドレスの抽出と置換
テキストからURLやメールアドレスを抽出するには、正規表現を使用します。
以下の例では、テキスト内のメールアドレスを抽出し、特定のドメインに置換しています。
import re
# テキスト内のメールアドレスを抽出して置換
text = "連絡先: user1@example.com, user2@domain.com"
new_text = re.sub(r'[\w.-]+@[\w.-]+', 'user@example.com', text)
print(new_text) # 出力: 連絡先: user@example.com, user@example.com
連絡先: user@example.com, user@example.com
日付フォーマットの変換
日付のフォーマットを変換する場合も、正規表現が役立ちます。
以下の例では、”YYYY/MM/DD”形式の日付を”DD-MM-YYYY”形式に変換しています。
import re
# 日付フォーマットの変換
original_date = "2023/10/15"
new_date = re.sub(r'(\d{4})/(\d{2})/(\d{2})', r'\3-\2-\1', original_date)
print(new_date) # 出力: 15-10-2023
15-10-2023
これらの応用例を通じて、文字列変換の実践的な方法を理解し、さまざまなデータ処理に役立てることができます。
まとめ
この記事では、Pythonにおける文字列の変換や置換の方法について詳しく解説しました。
数値変換、文字列置換、正規表現を用いた操作など、さまざまなテクニックを紹介し、それぞれの具体的な使用例を通じて理解を深めました。
これらの知識を活用して、データ処理や分析の際に、より効率的に文字列を操作できるようになることを目指しましょう。
次回は、実際のプロジェクトでこれらのテクニックを試してみることをお勧めします。