文字列の検索と置換、削除

文字列の検索と置換、削除

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

 Pythonで 指定文字列を検索する方法 を解説します。

find()メソッド 文字列を左端から検索

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

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

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

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

pritn(x)
2

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

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

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

print(x)
10

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

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

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

print(x)
-1

 

rfind()メソッド 文字列を右端から検索

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

 str.rfind() は第 1 引数に指定した検索文字列に一致する要素をオブジェクトから探し出します。範囲を指定しなければ、検索文字列と一致する要素を末尾から探し始めて最初にみつかった要素のインデックスを返します。

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

x = my_str.rfind("Python")

print(x)
23

 上のサンプルコードでは、文字列に "Python" という単語が 2 つ含まれていますが、rfind()メソッドによって末尾から近いほうの "Python" を見つけたので、"P" の文字に割り当てられたインデックス 23 を返しています。

 範囲を指定すると、範囲内で検索文字列と一致する要素の中で末尾に近い位置にある要素のインデックスを返します。検索文字列が存在しないと ValueError という例外が発生します。
 

indexメソッド 文字列を左端から検索

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

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

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

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

print(x)
42

 

rindexメソッド 文字列を右端から検索

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

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

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

x = my_str.rindex("PyCharm")

print(x)
40

 

startswithメソッド 最初の文字を調べる

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

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

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

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

print(x)
True

 

endswithメソッド 最後の文字を調べる

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

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

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

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

print(x)
True

 

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

replaceメソッド 文字列の置換

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

 str.replace()はオブジェクトの中から第 1 引数で指定した文字列を探して、第 2 引数で指定した文字列で置き換えます。

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

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

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

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

my_str = "AAA AAA AAA"

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

print(my_str)
'BBB BBB BBB'

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

my_str = "AAA AAA AAA"

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

print(my_str)
'BBB BAA AAA'

 

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

 Python で 指定文字列を削除した 文字列を返すメソッドを解説します。
 文字列は immutable なオブジェクトなので、もとの文字列は変更されません。

strip()メソッド 両端の文字列を削除

 strip(削除する文字列)

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

my_str = "AABABAA"

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

print(my_str)
BAB

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

my_str = "  Miniconda   "

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

print(my_str)
'Miniconda'

 

lstrip()メソッド 左端から文字列を削除

 lstrip(削除する文字列)

 str.lstrip() は左端から指定した文字列を削除した文字列を返します。
 削除の対象となるのは端から途切れなく続く指定文字列だけです。

my_str = "AABABAA"

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

print(my_str)
'BABAA'

 

rstrip()メソッド 右端から文字列を削除

 rstrip(削除する文字列)

 str.rstrip() は右端から指定した文字列を削除した文字列を返します。
 削除の対象となるのは、端から途切れなく続く指定文字列だけです。

my_str = "AABABAA"

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

print(my_str)
'AABAB'