文字列の検索
プログラミングにおいて、「ある文字列の中に、ある文字列が含まれるか?」を調べたくなることは頻出のタスクです。
文字列の検索と言えばreモジュール
文字列検索がらみの処理を行いたい場合、pythonの標準ライブラリに属している「re」モジュールをインポートし、re.searchメソッドを活用します。searchメソッド
以下で、searchメソッドの使い方を例示してみます。例えば、与えられたパターンが、"abcd"という文字列に含まれるかどうかを調べる関数をは次のようになります。
iPythonやJupyterNoteBook上で実際に試してみて、どんな風に動くのか体験してみてください。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.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:

No comments: