Pythonは、現在最も人気のあるプログラミング言語の1つで、幅広い用途に使用されています。その中でも、文字列操作は、Pythonにおいて特に重要な概念の1つです。
文字列操作を扱うことで、テキストデータの処理やファイル操作、ウェブスクレイピングなどのデータ収集作業など、様々な応用が可能になります。
本記事では、Pythonで文字列を操作するための基本的な方法から、正規表現を用いた高度な操作までを解説します。Pythonの文字列操作について学ぶことで、プログラミングで必要不可欠なスキルを身につけることができます。
また、Pythonにおける文字列操作は、複雑であるため、初心者から上級者まで幅広い読者に向けた解説を行っているため、本記事を読むことで、Pythonにおける文字列操作について幅広く学ぶことができます。
Python文字列とは

Pythonにおける文字列とは、複数の文字を表すデータ型のことを指します。
文字列は、シングルクォート(’)またはダブルクォート(”)で囲むことで作成できます。

なるほど、文字列ってそういうことか。じゃあ、文字列ってどんな使い方があるの?

たとえば、変数に文字列を格納する、ファイルの読み書きなどが挙げられます。
Python文字列の基本操作

じゃあ、文字列の基本操作ってどんなものがあるんだ?
インデックスとスライス

文字列のインデックスとは、文字列の各文字に割り振られた番号のことです。
Pythonでは、最初の文字が0から始まるため、インデックスは0から始まります。
text = "Hello, world!"
print(text[0]) # "H"を出力
print(text[-1]) # "!"を出力

なるほど、インデックスって文字列の各文字に対して番号が割り振られてるんだね。
で、文字列から1文字取り出したりできるってことか。

そうです。また、
スライスを使うことで、文字列から指定した範囲の部分文字列を取得できます。
text = "Hello, world!"
print(text[0:5]) # "Hello"を出力
print(text[7:]) # "world!"を出力

なるほど、スライスって文字列から部分文字列を取り出せるんだね。便利そうだな。
文字列の長さ(文字数)の取得方法

Python文字列の長さ(文字数)は、len()
関数を使って取得できます。
この関数を使うことで、文字列の長さを数値として取得できます。
text = "Hello, world!"
print(len(text)) # 13を出力

len()
関数で文字列の長さを取得できるんだね。すごい!
文字列の繰り返し(乗算)について

Python文字列は、*
演算子を使って繰り返すことができます。たとえば、"abc" * 3
という式を実行すると、”abc”を3回繰り返した”abcabcabc”が得られます。
text = "abc" * 3
print(text) # "abcabcabc"を出力

*演算子で文字列を繰り返せるんだね。たしかに、同じ文字列を何度も使いたいときってあるよね。
文字列の連結方法

Python文字列は、+
演算子を使って連結することができます。たとえば、"abc" + "def"
という式を実行すると、”abcdef”が得られます。
text1 = "abc"
text2 = "def"
text3 = text1 + text2
print(text3) # "abcdef"を出力

+
演算子で文字列を連結できるんだね。便利そうだな。
記事後半でより実践的な文字列結合について解説しているので、文字列の連結について興味ある方はそちらも参照ください。
文字列の変換方法

Python文字列は、str()
関数を使って他のデータ型から文字列に変換できます。たとえば、数値を文字列に変換するには、str(123)
というように書きます。
num = 123
text = str(num)
print(text) # "123"を出力

なるほど、str()
関数で他のデータ型から文字列に変換できるんだね。
Python文字列リテラルの記述方法

Python文字列リテラルとは、プログラム内で直接書かれた文字列のことを指します。文字列リテラルは、シングルクォート、ダブルクォート、または三連引用符で囲まれます。

三連引用符って何だろう?

三連引用符を使うことで、複数行にわたる文字列を記述することができます。また、エスケープシーケンスを使用しなくても、改行や引用符を含めたまま文字列を記述できます。
text = """
これは
複数行にわたる
文字列です。
"""
print(text)

オディゴ: なるほど、三連引用符で複数行の文字列を書けるんだね。これは便利そうだな。
Python文字列のエスケープシーケンス
オーサワ:

Python文字列では、\
を使って特殊な文字を表すエスケープシーケンスを使用することができます。エスケープシーケンスを使うことで、改行やタブ、シングルクォート、ダブルクォートなどを文字列に含めることができます。
text = "これは\"引用符\"です。"
print(text) # "これは"引用符"です。"を出力
text = "改行\\nしています。"
print(text)
# 改行
# しています。
text = "タブ\tで区切っています。"
print(text) # "タブ で区切っています。"を出力

なるほど、\
を使って特殊な文字を表すエスケープシーケンスを使えるんだね。改行やタブ、シングルクォート、ダブルクォートを文字列に含めるのに便利そうだな。
Pythonのraw文字列の利用

Pythonでは、文字列の先頭にr
をつけることで、raw文字列を記述することができます。raw文字列では、エスケープシーケンスをそのまま表現できます。
text = r"これは\\n改行しない文字列です。"
print(text) # "これは\\n改行しない文字列です。"を出力

なるほど、raw文字列を使えば、エスケープシーケンスをそのまま表現できるんだね。便利そうだな。
Python文字列の書式設定
オーサワ: Python文字列の書式設定には、書式化演算子**%
や、format()
**メソッド、フォーマット済み文字列リテラル(f文字列)を使うことができます。
書式化演算子%を使った文字列の書式設定

書式化演算子%
を使った文字列の書式設定では、書式指定子を使って文字列をフォーマットします。
text = "名前は%sで、年齢は%d歳です。" % ("太郎", 20)
print(text) # "名前は太郎で、年齢は20歳です。"を出力

書式化演算子%
を使った文字列の書式設定って何だろう?

たとえば、以下のような書式指定子があります。
%s
: 文字列%d
: 10進数%f
: 浮動小数点数%e
: 指数表現の浮動小数点数

書式指定子って、文字列や数字の形式を指定できるんだね。便利そうだな。
format()メソッドを使った文字列の書式設定

format()
メソッドを使った文字列の書式設定では、{}
を使って文字列をフォーマットします。
text = "名前は{}で、年齢は{}歳です。".format("太郎", 20)
print(text) # "名前は太郎で、年齢は20歳です。"を出力

{}
を使って文字列をフォーマットするんだね書式指定子とは違って、どんな形式でも指定できるのかな?

はい、format()
メソッドは、書式指定子に頼らずに、値を文字列に変換してフォーマットするため、より柔軟な書式設定が可能です。
フォーマット済み文字列リテラル(f文字列)を使った文字列の書式設定

Python 3.6からは、フォーマット済み文字列リテラル(f文字列)を使うことができます。f文字列を使うと、変数を埋め込んだ文字列を簡単に作成できます。

f文字列って何だろう?

f文字列は、文字列の先頭にf
をつけることで、文字列内に{}
で囲まれた式を埋め込むことができるようになった機能です。f文字列を使うことで、書式設定をより簡単に行えるようになりました。

それって、format()
メソッドと書式化演算子%
を使った書式設定よりも簡単にできるってこと?

はい、f文字列を使うことで、文字列の中に埋め込む変数を簡単に指定できます。例えば、format()
メソッドを使った書式設定では、{}
を使って文字列をフォーマットする必要がありますが、f文字列では、文字列内に直接変数を埋め込むことができます。

それって、どうやって使うの?

f文字列を使うには、文字列の先頭にf
をつけます。そして、文字列内に{}
で囲まれた式を埋め込みます。
# 変数を埋め込んだ文字列を作成する
name = "太郎"
age = 20
text = f"名前は{name}で、年齢は{age}歳です。"
print(text) # "名前は太郎で、年齢は20歳です。"を出力

{}
って、f文字列の中で変数を表しているんだね。

そうですね。{}
で囲まれた式を変数に置き換えることで、文字列内に変数を埋め込むことができます。

なるほど、それで変数を簡単に埋め込めるってわけだね。他にもf文字列を使うと便利なことがあるの?

はい、f文字列を使うと、数値や日付などのフォーマットも簡単に行えます。例えば、次のように日付をフォーマットして埋め込むことができます。
# 日付をフォーマットして文字列に埋め込む
import datetime
today = datetime.date.today()
text = f"今日は{today:%Y年%m月%d日}です。"
print(text) # "今日は2023年02月22日です。"を出力

{}
の中に:
を使って、日付をフォーマットしているんだね。

そうですね。:
の後にフォーマット指定子を指定することで、日付を任意のフォーマットで文字列に変換できます。このように、f文字列を使うことで、より柔軟な書式設定を簡単に行えるようになりました。
Python文字列操作の高度な使い方
Pythonの文字列操作には、高度な操作も含まれています。ここでは、文字列の検索と置換、大文字小文字の変換、文字列の分割と結合、正規表現を用いた文字列操作について解説します。
文字列の検索と置換
Pythonでは、文字列の中から特定の文字列を検索することができます。検索には、find()
、index()
、count(
)などのメソッドを使用します。
text = "Python is an easy-to-learn programming language."
# "Python"が最初に現れるインデックスを検索
print(text.find("Python")) # 0を出力
# "Java"が最初に現れるインデックスを検索
print(text.find("Java")) # -1を出力
# "Python"の出現回数をカウント
print(text.count("Python")) # 1を出力
# "programming"を"coding"に置換
new_text = text.replace("programming", "coding")
print(new_text) # "Python is an easy-to-learn coding language."を出力
大文字小文字の変換
Pythonでは、文字列の大文字と小文字を変換することができます。文字列の大文字と小文字を変換するには、upper()
、lower()
、capitalize()
、title()
などのメソッドを使用します。
text = "Python is an easy-to-learn programming language."
# 全ての文字を大文字に変換
print(text.upper()) # "PYTHON IS AN EASY-TO-LEARN PROGRAMMING LANGUAGE."を出力
# 全ての文字を小文字に変換
print(text.lower()) # "python is an easy-to-learn programming language."を出力
# 先頭の文字を大文字に変換
print(text.capitalize()) # "Python is an easy-to-learn programming language."を出力
# 単語の先頭の文字を大文字に変換
print(text.title()) # "Python Is An Easy-To-Learn Programming Language."を出力
文字列の分割と結合
Pythonでは、文字列を分割したり、複数の文字列を結合したりすることができます。文字列を分割するには、split()
メソッドを使用します。複数の文字列を結合するには、join()
メソッドを使用します。
text = "Python is an easy-to-learn programming language."
# スペースで分割
words = text.split()
print(words) # ['Python', 'is', 'an', 'easy-to-learn', 'programming', 'language.']を出力
# "-"で分割
words = text.split("-")
print(words) # ['Python is an easy', 'to', 'learn programming language.']を出力
# 単語をスペースで結合
text2 = " ".join(words)
print(text2) # "Python is an easy to learn programming language."を出力
# 単語を"-"で結合
text3 = "-".join(words)
print(text3) # "Python is an easy-to-learn programming language."を出力
文字列の結合については別記事で網羅的に解説しています。
文字列の分割については以下の記事で解説しています。
正規表現を用いた文字列操作
Pythonでは、正規表現を用いた文字列の操作も可能です。正規表現は、複雑なパターンを指定して、文字列の検索や置換などを行うための技術です。Pythonでは、re
モジュールを使用して正規表現を扱うことができます。
import re
text = "Python is an easy-to-learn programming language."
# "Python"が含まれるかどうかを調べる
match = re.search("Python", text)
if match:
print("マッチしました。")
# "programming"を含む単語を検索する
match = re.search(r"\\b\\w*programming\\w*\\b", text)
if match:
print("マッチしました。")
# "programming"を"coding"に置換する
new_text = re.sub("programming", "coding", text)
print(new_text) # "Python is an easy-to-learn coding language."を出力
正規表現については別記事で更に深く広く徹底解説しています。
コメント