第1回Python3データ分析模擬試験【第05問】解説

第1回Python3データ分析模擬試験第05問

本問題では「Pythonと環境・Pythonの基礎」のうち「正規表現」について学びます。

本問題の解説はYouTube動画でもご覧いただけます。
【解説動画】 第1回Python3データ分析模擬試験 第05問
※当解説動画シリーズはPythonエンジニア育成推進協会に認定された「Python 3 エンジニア認定データ分析試験」の参考教材です。

問題

次の正規表現を用いたスクリプトの[ ア ]の部分に入れたときエラーとなるものはどれか。

import re
prog = re.compile(‘Kus(a|u)n(a|o|k)g?i(saya|ro)?’, re.IGNORECASE)
[ ア ]
print(ret[0])

① ret = prog.search(‘KUSANAGI’)
② ret = prog.search(‘Kusanagi saya’)
③ ret = prog.search(‘Kusunoki’)
④ ret = prog.search(‘KUSANOGI’)
⑤ ret = prog.search(‘Kusanoiro’)

解説

正解は選択肢③です。以下、解説していきます。

コードの確認

正規表現モジュールreを使用した処理の流れ

コードを上から順に確認します。

まず正規表現モジュールreをインポートします。

IGNORECASEフラグ(大文字小文字を区別しない)の設定をしたうえで、「compile」関数で正規表現オブジェクトを生成して、変数の「prog」に代入します。

「search」メソッドでカッコの中の文字列を走査して、正規表現パターンにマッチするところをマッチオブジェクトとして変数retに代入します。

最後にprint関数でマッチした文字列全体を表示させます。

正規表現パターンの確認

正規表現パターン

選択肢を見る前に、正規表現パターンを確認します。

Kusから始まり、その後にaまたはu、そしてn、その後にaまたはoまたはkが続きます。

gには直後に疑問符がついているのでゼロ個または1個です。

その後iがあり、最後にsayaまたはroがゼロ個か1個…というパターンです。

先ほど確認した通り、IGNORECASEフラグが設定されているので、大文字小文字を区別しないで考えます。

選択肢①

正規表現パターンと文字列のマッチ①

選択肢①の文字列は右図のようにマッチします。

ちなみに「sayaまたはro」は選択肢①の文字列にはありませんが、そもそも0個(または1個)というパターンなのでマッチしなくてもエラーにはなりません。

選択肢②

正規表現パターンと文字列のマッチ②

選択肢②の文字列は右図のようにマッチします。

文字列のうち「半角スペース+saya」の部分は、正規表現パターンの「saya」にマッチしませんが、そもそも「sayaまたはro」のパターンは0個でもよいため、結局、全体としてマッチしていてエラーにはなりません。

選択肢③

正規表現パターンと文字列のマッチ③

選択肢③の文字列のうち、「Kusuno」まではマッチしています。

しかし正規表現パターンの丸カッコの二つ目のところで、すでにoがマッチしているので、「k」は、文字列のkにマッチさせられません。

その後も、gとiとsaya・roも、もちろんkとはマッチしません。

その結果、全体としてマッチせず、選択肢③はエラーとなります。

選択肢④

正規表現パターンと文字列のマッチ④

選択肢④は右図のようにマッチします。

マッチの仕方自体は、選択肢①と同様です。

選択肢⑤

正規表現パターンと文字列のマッチ⑤

選択肢⑤は右図のようにマッチします。

第1回Python3データ分析模擬試験第05問の解説は以上です。