本問題の解説は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をインポートします。
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問の解説は以上です。