【Python】文字列の後方一致を判定するendswithメソッド

2021年11月5日

Pythonで文字列の後方一致を判定するendswithを紹介します。



endswithメソッド

endswithメソッドで後方一致判定するプログラム

# 後方一致を判定するendswith

s = 'rstuvwxyz'

print(s.endswith('xyz')) # True
print(s.endswith('rst')) # False

実行結果

True
False

後方一致を判定するendswithメソッド

文字列(string型)の後方一致、つまり文字列の末尾が指定した文字列であるかを判定するメソッドがendswith()メソッドです。

str.endswith(prefix[, start[, end]])

文字列の末尾がprefixで終わればTrueを、そうでなければFalseを返却します。

省略可能なstartが指定されていればそのインデックスの位置から判定を開始します。

省略可能なendが指定されていればそのインデックスの位置で比較を終了します。

なおendswithとは逆の文字列(string型)の前方一致、つまり文字列の先頭が指定した文字列であるかを判定するメソッドがstartswith()メソッドです。

endswithメソッドで検索開始・終了位置を指定

# endswithメソッド検索開始・終了位置を指定

s = 'abcdefghi'

print(s.endswith('ghi',6))    # True
print(s.endswith('hi',7))     # True
print(s.endswith('bcd',1,4))  # True
print(s.endswith('efg',4,7))  # True

実行結果

True
True
True
True

startの最初のインデックスは0です。省略されている場合は0とみなされます。

一方endのインデックス値には注意でnではなくn + 1としなければなりません。

例えばs[3]の’d’まで検索させたい場合は4をendのパラメータとしなければなりません。

これらの規則はstartswithと全く同じです。

startとendに要素数を超える不正な値が入力された場合はFalseが返却されます。

endswithの引数に要素数を超える値を入力

# endswithの引数に要素数を超える値を入力

s = 'rstuvwxyz'

print(s.endswith('z', 9)) # False

実行結果

False

endswithメソッドの引数はタプルも可能

startswith同様にendswithメソッドの引数にもタプルが指定できます。

探索する文字列の末尾がタプルの要素のいずれかの文字列と一致すればTrueを、一致しなければFalseを返却します。

なおタプルではなくリストを引数にするとエラーになります。

endswithメソッドで引数にタプルを指定

# 後方一致を判定するendswithメソッド(タプルを指定)

s = 'rstuvwxyz'

print(s.endswith(('rst', 'uvw', 'xyz'))) # True
print(s.endswith(('abc', 'def', 'ghi'))) # False
print(s.endswith(['rst', 'uvw', 'xyz'])) # TypeError

実行結果

True
False
Traceback (most recent call last):
(中略)
TypeError: endswith first arg must be str or a tuple of str, not list

endswithメソッドの活用例(拡張子を選別)

# endswithメソッドで拡張子を選別

f = 'example.py'

if f.endswith('.py'):
  print('適切です。')
else:
  print('不適切です。')

実行結果

適切です。

末尾を指定した文字列かどうかの判定は拡張子の指定や選別に適応できます。

逆の否定形はstartswith同様if not文で実現できます。

endswithメソッドの否定形

# endswithメソッドの否定形

f = 'example.js'

if not f.endswith('.py'):
  print('不適切です。')
else:
  print('適切です。')

実行結果

不適切です。