Python PR

【Python】ある文字以降を抽出したり削除したりする方法

記事内に商品プロモーションを含む場合があります

この記事では、Pythonである文字以降を抽出したり削除したりする方法を解説します。

色々な方法が考えられるので状況に合ったものを選んで使ってください。また、少し変更を加えるだけである文字以前にも対応することができます。

それでは、ある文字以降を抽出、削除する方法を見ていきましょう!!

ある文字以降を抽出

文字列中の任意の文字以降のデータを抽出する方法を解説します。

str.partition()を使ってある文字以降を抽出する

str.partition()は引数で指定した文字列で分割し、区切りの前の部分と区切り文字列そのもの、区切りの後ろの部分をタプルとして返してくれます。

つまりは、タプルから区切りの後ろの部分を取得することである文字以降を抽出できます。

# コロン(:)以降を取得したい文字列
s = 'abcd:efg'

# 分割
t = s.partition(':')

# タプルとして取得
print(t)

# 後ろの部分が欲しい場合は[2]か[-1]
print(t[2])
print(t[-1])

実行結果

('abcd', ':', 'efg')
efg
efg

分割できなかった場合は、タプルの2、3番目の要素に空文字が渡されます。空文字で問題があるならif文を使って処理を分岐させておきましょう。

スライスとstr.index()である文字以降を抽出する

文字列から特定の文字以降のデータを取得したい場合、str.index()を用いて任意の文字のインデックスを取得し、スライスを使うことで実装することができます。

# コロン(:)以降を取得したい文字列
s = 'abcd:efg'

# コロンのインデックスを取得
index = s.index(':')

# コロン以降の文字列の抽出
print(s[index + 1:len(s)])

# コロンを含めいたい場合は、index に 1 を足さない
print(s[index:len(s)])

実行結果

efg
:efg

ちなみに、str.index()は引数で指定した文字列が見つからないとValueErrorが送出されるので例外処理が必要となります。

str.find()を使っても良い。こちらのメソッドは発見できなかった場合に -1 を返す。

分割(str.split())を使ってある文字以降を抽出する

str.split()を使うことで任意の文字で文字列を分割することができます。つまりは、分割して生成されたリストの2番目の要素に指定した文字以降のデータが入っていることになります。

# コロン(:)以降を取得したい文字列
s = 'abcd:efg'

# コロンで分割(maxsplit で最大分割数を指定)
split_s = s.split(':', maxsplit=1)

# 2番目の要素、というか最後の要素を取得
print(split_s[-1])

実行結果

efg

ただしこの方法だと分割されなくてもエラーが発生しない。それだと不都合がある場合はリスト(上記では split_s)の長さを調べることで分割されているかどうかを知ることができます。

正規表現である文字以降を抽出する

正規表現を使ってある文字以降のデータを取得するには、グループ化を使うことで簡単に取得することができます。

import re

# コロン(:)以降を取得したい文字列
s = 'abcd:efg'

# コロン以降の複数の文字をグループ化
pattern = ':(.+)'
m = re.search(pattern, s)

# グループを取得
print(m.group(1))

実行結果

efg

マッチしなかった場合はprint(m.group(1))の部分でAttributeErrorが発生してしまうので、その前にNone判定をしておく必要があります。

Link正規表現の書き方を学ぼう!

ある文字以降を削除

文字列中の任意の文字以降のデータを削除する方法を解説します。

str.partition()を使ってある文字以降を削除する

str.partition()を使って取得したタプルから区切りの前の部分を取得することである文字以降を削除したデータを扱うことができます。

# コロン(:)以降を削除したい文字列
s = 'abcd:efg'

# 分割
t = s.partition(':')

# 前の部分を取得
print(t[0])

実行結果

abcd

スライスとstr.index()である文字以降を削除する

str.index()を用いて任意の文字のインデックスを取得し、スライスを使ってそのインデックスまでの要素を指定することである文字以降を除いたデータを取得することができます。

# コロン(:)以降を削除したい文字列
s = 'abcd:efg'

# コロンのインデックスを取得
index = s.index(':')

# スライスでindexまでの文字列を取得する
print(s[:index])

実行結果

abcd

分割(str.split())を使ってある文字以降を削除する

str.split()を使って分割して生成したリストの最初の要素を取得することである文字以降を除いたデータを取得することができます。

# コロン(:)以降を削除したい文字列
s = 'abcd:efg'

# コロンで分割(maxsplit で最大分割数を指定)
split_s = s.split(':', maxsplit=1)

# 最初の要素を取得
print(split_s[0])

実行結果

abcd

正規表現である文字以降を削除する

グループ化する箇所をある文字以前にすることである文字以降を除いたデータを取得することができます。

import re

# コロン(:)以降を削除したい文字列
s = 'abcd:efg'

# コロン以前の複数の文字をグループ化
pattern = '(.+):'
m = re.search(pattern, s)

# グループを取得
print(m.group(1))

実行結果

abcd

また、re.sub()を使ってマッチした箇所を空文字にすることである文字以降を削除することができます。re.sub()は結果を文字列として返します。

import re

# コロン(:)以降を削除したい文字列
s = 'abcd:efg'

# コロンとそれ以降の複数の文字を指定
pattern = ':.+'

# マッチした箇所を空文字に置換
sub = re.sub(pattern, '', s)

# 文字列なのでそのまま出力
print(sub)

実行結果

abcd

まとめ

この記事では、ある文字以降を抽出したり削除したりする方法を解説しました。

文字列中から必要なデータを抜き出したり余分な部分を削除したりする処理は結構使うので覚えておくか、いつでも見返せるようにブックマークしておくと便利です。

それでは今回の内容はここまでです。ではまたどこかで〜( ・∀・)ノ