本問題では「Pythonと環境・Pythonの基礎」のうち「正規表現」について学びます。
本問題の解説はYouTube動画でもご覧いただけます。
【解説動画】 第1回Python3データ分析模擬試験 第05問
※当解説動画シリーズはPythonエンジニア育成推進協会に認定された「Python 3 エンジニア認定データ分析試験」の参考教材です。
問題
次の正規表現を用いたスクリプトの[ ア ]の部分に入れたときエラーと表示されるものはどれか。
import re
prog = re.compile(r'py?(th|ers)oni?(a[lmn]|c)?', re.IGNORECASE)
[ ア ]
if ret is None:
print('エラー')
else:
print(ret[0])
① ret = prog.search(‘Python’)
② ret = prog.search(‘personal’)
③ ret = prog.search(‘pythomian’)
④ ret = prog.search(‘PYTHONIC’)
⑤ ret = prog.search(‘The Zen of Python’)
解説
正解は選択肢③です。以下、解説していきます。
コードの確認
コードを上から順に確認します。
まず正規表現モジュールre
をインポートします。
IGNORECASE
フラグ(大文字小文字を区別しない)の設定をしたうえで、「compile
」関数で正規表現オブジェクトを生成して、変数の「prog
」に代入します。
正規表現パターンの文字列の前にr
という文字がありますが、これはraw文字列記法というものです。正規表現パターンの文字列のエスケープを無効化するためによく記載されます。Python では正規表現パターンを記載する際にraw文字列記法を使うことが強く推奨されています。
「search
」メソッドでカッコの中の文字列を走査して、正規表現パターンにマッチするところをマッチオブジェクトとして変数ret
に代入します。
if
文で変数ret
がNone
の場合、正規表現にマッチしなかったのでprint
関数で「エラー」の文字を表示します。
変数ret
がNone
以外の場合、正規表現にマッチしているのでprint
関数でマッチした文字列全体を表示させます。
正規表現パターンの確認
正規表現にはシンタックスと呼ばれる特殊な表記法があります。(右図下部の表)
選択肢を見る前に、シンタックスを考慮した正規表現パターンを確認します。
- 【
py?
】p
から始まり、その直後のy
は?
(疑問符)がついていますので0(ゼロ)個もしくは1個という意味になります。つまり、p
もしくはpy
のどちらかのパターンになります。 - 【
(th|ers)
】th
もしくはers
のどちらかのパターンになります。 - 【
oni?
】on
の直後のi
には?
がついていますので、on
もしくはoni
のどちらかのパターンになります。 - 【
(a[lmn]|c)?
】少し複雑ですので1つずつ確認しながら考えます。[lmn]
はl
(エル)またはm
またはn
のいずれか1文字のパターンです。つまりa[lmn]
は、al
またはam
またはan
のいずれかのパターンとなります。(a[lmn]|c)
は、a[lmn]
もしくはc
のどちらかのパターンです。つまり、al
またはam
またはan
またはc
のいずれかのパターンとなります。(a[lmn]|c)?
は(a[lmn]|c)
に?
がついていますので、al
またはam
またはan
またはc
のパターンが0個もしくは1個のパターンとなります。つまり、この部分のパターンは文字列の中になくても問題はないということです。
先ほど確認した通り、IGNORECASEフラグが設定されているので、大文字小文字を区別しないで考えます。
選択肢①
選択肢①の文字列は右図のようにマッチします。
ちなみにi
および「al
、am
、an
、c
」の文字は選択肢①の文字列にはありませんが、そもそも0個(または1個)というパターンなのでマッチしなくてもエラーにはなりません。
選択肢②
選択肢②の文字列は右図のようにマッチします。
選択肢③
選択肢③の文字列のうち、pytho
まではマッチしています。
しかし、o
の次にマッチさせられる文字はn
のみですが、選択肢③ではm
が設定されていますのでマッチができません。
その後、正規表現にm
の文字はありますが、こちらはam
という並びの文字列にマッチします。
こちらのm
でもマッチさせることはできません。
その結果、文字列全体としてどの部分にもマッチせず、選択肢③はエラーと表示されます。
選択肢④
選択肢④は右図のようにマッチします。
選択肢⑤
選択肢⑤は右図のようにマッチします。
「The Zen of 」の部分はマッチしないので、マッチした文字列を表示すると「Python」のみが表示されます。
「Python」部分のマッチの仕方自体は、選択肢①と同様です。
第1回Python3データ分析模擬試験第05問の解説は以上です。