【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('適切です。')
実行結果
不適切です。