見出し画像

【python3】与えられた文字列が特定の文字列で始まっているかどうか、正規表現を使ってチェックする

例えば色んな単語が詰まったリストを与えられて、その中から「not」で始まる単語だけ取り出したい、みたいなやつです。

正規表現モジュールreを使う


import re

標準モジュールなのでこれだけでOKです。
正規表現って何?ってところからの方は「正規表現とは」でググっていただければ親切丁寧なサイトが沢山出てきますが、一言で言うと、条件をとても柔軟かつ細かく指定できる検索ワードです。
(「最初の三文字がabcで、そのあと2文字何でもいいから文字があって、その後ハイフンが入って、その先は何文字でも良いから英数字があって、最後はピリオドで終わる文字列だけ探す」みたいなことができる便利なやつです)

文字列の先頭が指定のパターンと一致するか判定する

def re_test(str):
    pattern = "^abc"
    if(re.match(pattern, str)): print(f"{str} is match({pattern})")

re_test("abcd")

1:チェックパターンの正規表現文字列patternを用意する
2:チェックしたい文字列strを用意する
3:re.match(pattern, str)

re.matchは「文字列の先頭からチェックして、パターンにマッチするか」を確認してくれる。戻り値は「マッチオブジェクト」か「None」なので、ただ「マッチしたか」を確認したい時は

if(re.match(pattern, str)):

でOK。どこでマッチしたかとか細かい情報を取りたいときはマッチオブジェクトの中身をぐりぐりすると便利だけど、とりあえず今回は不要。

正規表現の書き方はググればすぐ出てくるけど、とりあえず

"^abc"

で、「文頭がa、その次がb、さらに次がc」という意味になる。
ので、実は、matchを使うなら頭の^が無い、ただの"abc"でも同じ意味になるんだけど、自分がmatchの仕様(文頭からチェックする)すぐ忘れるけど、「正規表現では^が文頭を表す」は忘れないので、「ちゃんと文頭見てますよ!」を後日の自分にアピールするために付けておいています。

もっと複雑な正規表現を使いたくなったらさらに便利な使い方が色々あるけど、とりあえずざっくり文頭が指定の文字で始まってるかを調べるだけならこれだけでOKです。

ちなみに、文頭以外も確認したい場合

文頭じゃなくて「文字列のどこでもいいから「abc」の並びがあるかどうかを確かめたい」と言うときはmatch()じゃなくてsearch()が使えます。使い方はmatchと同じ。

if(re.match("abc", str)):    # matchは勝手に行頭からチェックする
if(re.search("^abc", str)):  # searchは^で明示的に行頭からチェックしろって命令が必要

は同じ結果になるけど、

if(re.match("abc", str)):   
if(re.search("abc", str)):

だと、matchは「abcde」にはマッチするけど「xyzabc」にはマッチしない。
searchはどちらにもマッチする。
必要に応じて使い分けてください。(searchだけ覚えて行頭の記号^を覚える方が手っ取り早い様な気もしますが、その辺はお好みで)

この記事が気に入ったらサポートをしてみませんか?