記事内にはプロモーションが含まれています

Pythonで部分文字列を自在に操るには?抽出・判定・検索・置換の方法

Pythonで部分文字列を自在に操るには?抽出・判定・検索・置換の方法 Python

Pythonでテキストデータを扱う際、特定の単語が含まれているかを確認したり、必要な箇所だけを抜き出したりする操作は、あらゆるプログラムの基本となります。

「特定の文字から特定の文字までを切り出したい」
「リストの中から特定のパターンに一致する文字列を探したい」
「後ろから数文字分だけを抽出したい」

このような文字列操作の悩みは、Pythonの標準機能をマスターするだけで即座に解決可能です。

この記事では、部分文字列の抽出、判定、検索、置換といった日常的に使うテクニックを、初心者にもわかりやすく丁寧に解説します。

【本記事の信頼性】
プロフィール
執筆者:マヒロ
  • 執筆者は元エンジニア
  • SES⇒大手の社内SE⇒独立
  • 現在はこじんまりとしたプログラミングスクールを運営
  • モットーは「利他の精神」

部分文字列が「含まれているか」を判定・一致確認する方法

文字列の中に特定のキーワードが存在するかどうかを調べる「判定」は、条件分岐などで最も頻繁に使われる操作の一つです。

Pythonでは、直感的に書ける in 演算子や、特定の文字で始まっているかを確認するメソッドが用意されています。
用途に応じた最適な使い分けを理解しましょう。

in 演算子を使ったシンプルな判定

Pythonにおいて、ある文字列の中に別の文字列が含まれているかを調べる最も簡単で推奨される方法は、in 演算子を使うことです。

text = "Pythonはデータ分析に非常に強力な言語です。"
keyword = "データ分析"

# 部分文字列が含まれているか判定
if keyword in text:
    print(f"「{keyword}」が見つかりました。")
else:
    print("見つかりませんでした。")

実行結果

「データ分析」が見つかりました。

このソースは、変数 text の中に keyword という文字列が一部として存在するかを判定しています。

結果は真偽値(True/False)で返るため、そのまま if 文の条件式として利用できるのが大きなメリットです。

また、逆に含まれていないことを確認したい場合は、not in を使うことで非常に読みやすいコードになります。

startswith / endswith で前方一致・後方一致を確認

文字列の「最初」や「最後」が特定の文字と一致しているかを判定したい場合は、startswith メソッドや endswith メソッドが便利です。

filename = "report_analysis.csv"

# 左から(先頭)チェック
if filename.startswith("report"):
    print("これはレポートファイルです。")

# 右から(末尾)チェック
if filename.endswith(".csv"):
    print("CSV形式のファイルです。")

実行結果

これはレポートファイルです。
CSV形式のファイルです。

startswith は文字列が指定した文字で始まっているか(左から一致)、endswith は指定した文字で終わっているか(右から一致)を判定します。

ファイル形式のチェックや、特定の接頭辞を持つデータの抽出において非常に強力な武器となります。

スライスを使った部分文字列の「抽出・切り出し」テクニック

文字列の「3文字目から8文字目まで」といった具合に、位置を指定して抜き出すことを抽出(切り出し)と呼びます。

Pythonでは「スライス」という強力な機能を使うことで、インデックスを指定するだけで自由自在に文字列を切り分けることが可能です。

基本的な切り出し(左から・範囲指定)

スライスは [開始位置:終了位置] の形式で記述します。
Pythonのインデックス(添字)は 0から始まる 点に注意が必要です。

s = "Programming"

# 0番目から3番目の手前(つまり0,1,2)までを抽出
print("先頭から3文字:", s[0:3])

# 開始を省略すると「最初から」
print("左から5文字目まで:", s[:5])

# 終了を省略すると「最後まで」
print("3文字目以降すべて:", s[2:])

実行結果

先頭から3文字: Pro
左から5文字目まで: Progr
3文字目以降すべて: ogramming

このソースコードにおいて最も重要なルールは、終了位置に指定したインデックスの文字は含まれない ということです。

例えば s[0:3] と書いた場合、インデックス3の文字は含まれず、その直前までの3文字が抽出されます。

後ろから抽出する方法(マイナスインデックス)

文字列の末尾から数えて切り出したい場合は、マイナスの数値を使います。

url = "
Example Domain
(https://example.com/item/12345)" # 後ろから5文字を抽出 item_id = url[-5:] print("アイテムID:", item_id) # 最後の一文字を除去して抽出 prefix = url[:-1] print("最後の一文字抜き:", prefix)

実行結果

アイテムID: 12345
最後の一文字抜き: 
Example Domain
(https://example.com/item/1234)

Pythonでは末尾の文字を -1、その隣を -2 と数えます。[-5:] と記述することで、「後ろから5番目の文字から最後まで」という指定になり、文字列の長さが動的に変わる場合でも正確に末尾の情報を後ろから切り出すことができます。

部分文字列の「検索・位置特定」を行う方法

「特定の単語が、全体の何文字目にあるか」を知りたい場合は検索メソッドを使用します。

検索した位置がわかれば、そこを起点にして動的に文字列を切り出すことが可能になります。

find と index で位置を探す

位置を特定するメソッドには findindex の2種類がありますが、エラー時の挙動が異なります。

sentence = "Pythonは学習しやすく、多くのライブラリがあります。"

# "学習" という単語が何文字目にあるか検索
pos = sentence.find("学習")

if pos != -1:
    print(f"「学習」の開始位置はインデックス {pos} です。")

実行結果

「学習」の開始位置はインデックス 6 です。

find メソッドは、見つかった場合はその最初のインデックスを返し、見つからなかった場合は -1 を返します。

一方、index メソッドは見つからないとエラー(例外)を発生させるため、特別な理由がない限りは安全な find を使うのが一般的です。

特定の文字までを動的に抽出する

検索とスライスを組み合わせることで、「最初のカンマまで」や「@マーク以降」といった特定の文字までの動的な切り出しが可能になります。

email = "suzuki_ichiro@example.jp"

# "@" の位置を探す
at_mark_pos = email.find("@")

# 見つかった場合のみスライスを実行(-1の場合のバグを防ぐ)
if at_mark_pos != -1:
    user_name = email[:at_mark_pos]
    print("ユーザー名:", user_name)
else:
    print("指定した文字が見つかりませんでした。")

実行結果

ユーザー名: suzuki_ichiro

このコードでは、まず find("@") で記号の位置を特定しています。

重要なのは if at_mark_pos != -1 というチェックです。
もし @ が含まれていない場合、find-1 を返しますが、そのままスライス [: -1] を行うと「最後の1文字を除いたすべて」という意図しない抽出結果になってしまいます。

実務では必ずエラーチェックを行うよう習慣づけましょう。

応用編:正規表現で「囲まれた」文字列の抽出と置換

より複雑な条件、例えば「カッコ内に囲まれた文字だけをすべて抜き出したい」といったケースでは、正規表現(re モジュール)を活用します。

囲まれた文字列をすべて抜き出す

import re

text = "商品の価格は[1,200円]、送料は[500円]です。"

# [ ] に囲まれた部分をすべて抽出(最短一致)
results = re.findall(r"\[(.*?)\]", text)

for price in results:
    print("抽出された内容:", price)

実行結果

抽出された内容: 1,200円
抽出された内容: 500円

このソースは正規表現の findall 関数を使用しています。

パターン \[(.*?)\] の中にある ? は非常に重要です。
これがないと、行の中に複数の [...] があった場合に、最初の [ から最後の ] までをすべて繋げて一つの大きな塊として抜き出してしまいます。

個別に抜き出したい場合は必ず ? を付けて「最短一致」させましょう。

文字列の一部を置換する方法

部分文字列を別の文字に書き換えたい場合は、replace メソッドを使います。

original_text = "明日の天気は晴れです。晴れを楽しみましょう。"

# "晴れ" を "雨" に置換
new_text = original_text.replace("晴れ", "雨")

print(new_text)

実行結果

明日の天気は雨です。雨を楽しみましょう。

replace は、第一引数に「置換したい古い文字」、第二引数に「新しい文字」を指定します。

デフォルトでは、見つかったすべての対象が置換されます。

回数を制限したい場合は、第三引数に最大個数を指定することも可能です。

Pythonのスキルを活かして年収を上げる方法

以上、Pythonで、部分文字列を抽出・判定・検索・置換する方法について解説してきました。

なお、Pythonのスキルがある場合には、「転職して年収をアップさせる」「副業で稼ぐ」といった方法を検討するのがおすすめです。

Pythonエンジニアの需要は非常に高いため、転職によって数十万円の年収アップはザラで、100万円以上年収が上がることも珍しくありません。

なお、転職によって年収を上げたい場合は、エンジニア専門の転職エージェントサービスを利用するのが最適です。

今すぐ転職する気がなくとも、とりあえず転職エージェントに無料登録しておくだけで、スカウトが届いたり、思わぬ好待遇の求人情報が送られてきたりするというメリットがあります。

併せて、副業案件を獲得できるエージェントにも登録しておくと、空いている時間を活かして稼げるようなPythonの案件を探しやすくなります。

転職エージェントも副業エージェントも、登録・利用は完全無料なので、どんな求人や副業案件があるのか気になる方は、気軽に利用してみるとよいでしょう。