BREAKING NEWS

4

文字列の検索



プログラミングにおいて、「ある文字列の中に、ある文字列が含まれるか?」を調べたくなることは頻出のタスクです。

文字列の検索と言えばreモジュール

文字列検索がらみの処理を行いたい場合、pythonの標準ライブラリに属している「re」モジュールをインポートし、re.searchメソッドを活用します。

searchメソッド

以下で、searchメソッドの使い方を例示してみます。
例えば、与えられたパターンが、"abcd"という文字列に含まれるかどうかを調べる関数をは次のようになります。

iPythonやJupyterNoteBook上で実際に試してみて、どんな風に動くのか体験してみてください。


import re
def isInABCD(pattern):
ans = re.search(pattern,'abcd')
if ans:
print(f'Yes, "{ans.group()}" is containd from {ans.start()}, to {ans.end()}')
else:
print(f'No, "{pattern}" is not containd.')
 
このre.searhメソッドの書式は次のようになります

re.search(pattern, string, flags=0)

re.searchメソッドの使い方の基本は2つの引数

第一引数「pattern」に、調べたいもの。
第二引数「string」に、調べる対象となる文字列

を与えます。
そして、戻り値は、MatchObject(マッチオブジェクト)として返ります。

>>> isInABCD("a")
Yes, "a" is containd from 0, to 1
>>> isInABCD("bc")
Yes, "bc" is containd from 1, to 3
>>> isInABCD("e")
No, "e" is not containd.
実際に使ってみると上記のような出力をします。

MatchObject


戻り値であるMatchObjectは、pattern引数に合致する部分があった場合、何が合致したのか、その場所は何処かという詳細を含んだオブジェクトとなります。
一方で、合致する部分が無かった場合Noneオブジェクトが返ります。

ですから、単純にパターンが対象文字列に「含まれる」or「含まれない」という判定をするだけの場合には、上記例示関数の4行目から示している様に、返り値そのものをifステートメントで調べるだけで良いです。

MatchObjectから得られる情報


MatchObjectに対しては次のメソッドで主な情報が得られます。

group()
何がマッチしたのか

start()
どの位置からマッチしたのか

end()
どの位置までマッチしたのか

以上のメソッドは、上記例示関数の5行目で使われています。

正規表現


python.orgのドキュメントは結構詳しく分かりやすいです。
https://docs.python.org/ja/3.6/howto/regex.html


文字列の検索 文字列の検索 Reviewed by shunsk on 6/28/2018 Rating: 5

No comments: