『Python数値計算ノート』ではアフィリエイトプログラムを利用して商品を紹介しています。

文字列の検索・置換・削除

文字列を検索するメソッド

Python の文字列(str オブジェクト)には、特定の文字列を検索するメソッドがいくつか用意されています。

str.find()

str.find() は指定した検索文字列に一致する要素をオブジェクトから探します。

str.find (検索文字列 [,開始インデックス [,終了インデックス]])

範囲を指定しない場合は検索文字列と一致する要素を先頭から探して、最初にみつかった要素のインデックスを返します。

# PYTHON_STRING_FIND

# In[1]

# 文字列を定義
my_str = "Python"

# "th" を探します
x = my_str.find("th")

pritn(x)
# 2

範囲を指定した場合は、その範囲内で検索文字列と一致する要素の中から先頭に近い要素のインデックスを返します。

# In[2]

# 文字列を定義
my_str = "Jupyter Notebook"

# 範囲を指定して "te" を探します
x = my_str.find("te", 8, 13)

print(x)

# 10

検索文字列が存在しなければ、-1 を返します。

# In[3]

# 文字列を定義
my_str = "Anaconda"

# "z" を探します
x = my_str.find("z")

print(x)
# -1

str.rfind()

str.rfind() は第 1 引数に指定した検索文字列に一致する要素をオブジェクトから探し出します。

str.rfind (検索文字列 [,開始インデックス [,終了インデックス]])

範囲を指定しなければ、検索文字列と一致する要素を末尾から探し始めて最初にみつかった要素のインデックスを返します。

# PYTHON_STRING_RFIND

# In[1]

my_str = "Pythonで人工知能を作りたい。\
そのためにはPythonをもっと勉強しなくてはならない。"

x = my_str.rfind("Python")

print(x)
# 23

上のサンプルコードでは、文字列に “Python” という単語が 2 つ含まれていますが、rfind()メソッドによって末尾から近いほうの “Python” を見つけたので、”P” の文字に割り当てられたインデックス 23 を返しています。
 
範囲を指定すると、範囲内で検索文字列と一致する要素の中で末尾に近い位置にある要素のインデックスを返します。検索文字列が存在しないと ValueError という例外が発生します。

str.index()

 str.index() は指定した検索文字列に一致する要素をオブジェクトから探します。

str.index (検索文字列 [,開始インデックス [,終了インデックス]])

範囲を指定しない場合は、検索文字列と一致する要素を先頭から探して、最初にみつかった要素のインデックスを返します。範囲を指定したときは、範囲内で検索文字列と一致する要素の中で先頭に近い位置にある要素のインデックスを返します。検索文字列が存在しないと ValueError が発生します。

# PYTHON_STRING_INDEX

# In[1]

my_str = "Pythonではあらゆることが可能になる。\
そこまで言うのは大げさかもしれないけれど、Python使うと色々なことができるよね"

# 左から 10 番目以降から "Python" を検索します
x = my_str.index("Python", 10)

print(x)
# 42

str.rindex()

str.rindex() は指定した検索文字列に一致する要素をオブジェクトから探します。

str.rindex (検索文字列 [,開始インデックス [,終了インデックス]])

範囲を指定しない場合は、検索文字列と一致する要素を末尾から探し始めて最初にみつかった要素のインデックスを返します。引数で範囲を指定した場合には、その範囲内で検索文字列と一致する要素の中で先頭に近い位置にある要素のインデックスを返します。検索文字列が存在しないと ValueError が発生します。

# PYTHON_STRING_RINDEX

# In[1]

my_str = "PyCharmはとても人気のあるPythonのIDEだ。\
本格的な開発に挑むなら PyCharmを使えるように準備しておくべきだよ。"

x = my_str.rindex("PyCharm")

print(x)
# 40

str.startswith()

str.startswith() は、指定範囲内の最初の文字列が検索文字列と一致しているときに True を返します。一致しなければ False を返します。

str.startswith (検索文字列[, 開始インデックス[, 終了インデックス]])
# PYTHON_STRING_STARTWITH

# In[1]

my_str ="Method is associated to an object"
#(訳:メソッドはオブジェクトに関連付けられています)

#最初の文字列がMethodであるかどうかを調べます
x = my_str.startswith("Method")

print(x)
# True

str.endswith()

str.endswith() は、指定範囲内の最後の文字列が検索文字列と一致しているときに True を返します。一致しなければ False を返します。

str.endswith (検索文字列[, 開始インデックス[, 終了インデックス]])
# PYTHON_STRING_ENDWITH

# In[1]

my_str ="Method is associated to an object"
#(訳:メソッドはオブジェクトに関連付けられています)

#最後の文字列が"object"であるかどうかを調べます
x = my_str.endswith("object")

print(x)
# True

文字列を置換するメソッド

str.replace() を使うと、文字列の中の特定の文字列を指定文字列で置き換えることができます。

str.replace()

str.replace() は文字列から第 1 引数で指定した文字列を探して、第 2 引数で指定した文字列で置き換えた文字列を返します。ただし、Python の文字列は immutable オブジェクトなので、もとの文字列は変更されません。

str.replace (置換される文字列, 置換する文字列 [, 置換回数])
# PYTHON_STRING_REPLACE

# In[1]

my_str = "メンデレビウムは超ウラン元素なので天然には存在しない。"

# メンデレビウムをローレンシウムに置き換えます
my_str = my_str.replace("メンデレビウム","ローレンシウム")

print(my_str)
# 'ローレンシウムは超ウラン元素なので天然には存在しない。'

第 3 引数に何も指定しないと、第 1 引数に一致する文字列はすべて置き換えられます。

# In[2]

my_str = "AAA AAA AAA"

# 4個のAをBで置き換えます
my_str = my_str.replace("A", "B")

print(my_str)
# 'BBB BBB BBB'

第 3 引数では最大置換回数を指定できます。
最大置換回数を超える置換は行われません。

# In[3]

my_str = "AAA AAA AAA"

# 4個のAをBで置き換えます
my_str = my_str.replace("A", "B", 4)

print(my_str)
# 'BBB BAA AAA'

文字列を削除するメソッド

文字列には指定文字列を削除するメソッドがあります。文字列は immutable なオブジェクトなので、実際にはもとの文字列は変更されず、新たなオブジェクトを返します。

str.strip()

str.strip() は両端から引数に指定した文字列を削除した文字列を返します。

strip(削除する文字列)

削除の対象となるのは、端から途切れなく続く指定文字列だけです。
たとえば “AABABAA” という文字列に strip()メソッドを使ってみます。

# PYTHON_STRING_STRIP

# In[1]

my_str = "AABABAA"

# 両端の "A" をすべて削除します
my_str = my_str.strip("A")

print(my_str)
# BAB

“A” という文字を指定しているので、左右の端から続く “A” だけが削除されて、真ん中の “A” は残っています。引数に何も指定しないと、スペースやタブを消します。

# In[2]

my_str = "  Miniconda   "

# 両端のスペースを削除します
my_str = my_str.strip()

print(my_str)
# 'Miniconda'

str.lstrip()

str.lstrip() は左端から指定した文字列を削除した文字列を返します。

lstrip(削除する文字列)

削除の対象となるのは端から途切れなく続く指定文字列だけです。

# PYTHON_STRING_LSTRIP

# In[1]

my_str = "AABABAA"

# 左端の "A" をすべて削除します
my_str = my_str.lstrip("A")

print(my_str)
# 'BABAA'

str.rstrip()

str.rstrip() は右端から指定した文字列を削除した文字列を返します。

rstrip(削除する文字列)

削除の対象となるのは、端から途切れなく続く指定文字列だけです。

# PYTHON_STRING_RSTRIP

# In[1]

my_str = "AABABAA"

# 右端の "A" をすべて削除します
my_str = my_str.rstrip("A")

print(my_str)
# 'AABAB'

コメント