009_pythonエンジニア認定データ分析試験2-4

目次

Pythonと環境 -Pythonの基礎-

40問中5問ある「Pythonと環境」の中で、「Pythonの基礎」に関する問題が3問出題されます!

参考:https://cbt.odyssey-com.co.jp/pythonic-exam/python3cda.html

本試験の主教材である「Pythonによるあたらしいデータ分析の教科書第2版」では第2章2節 (P028~042) の内容です。

「Pythonの基礎」の中で正規表現に関する問題です!
それでは、練習問題を解いてみましょう!

使用するツール

Google Colab

使い方は次の記事より詳しく紹介しています。

練習問題1

問題

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(“iython”)

答えはコチラをクリック!

答え:

誤)iython
正) python

ポイント(クリック!)
正規表現とは〇〇

Pythonで正規表現を扱うにはreモジュールを使用します。

・’py?(th|ers)oni?(a[lmn]|c)?’ は今回の正規表現のパターンです。
re.IGNORECASE は大文字・小文字を区別しないという意味があります。

・search( 文字列 ) によって正規表現のパターンにマッチするか検索します。

パターンの先頭はpです。
ですが、検索する文字列「iython」は i から始まるため、マッチしません。


正規表現のパターンにマッチするかどうかの問題は問題によって文字列が変わります!
自分で文字列や正規表現を作ってみると理解度もupします!

練習問題2

問題

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(“perfect”)

答えはコチラをクリック!

答え:

誤)perfect
正)personal

ポイント(クリック!)
正規表現における( )や | は〇〇

Pythonで正規表現を扱うにはreモジュールを使用します。

・’py?(th|ers)oni?(a[lmn]|c)?’ は今回の正規表現のパターンです。
re.IGNORECASE は大文字・小文字を区別しないという意味があります。

・search( 文字列 ) によって正規表現のパターンにマッチするか検索します。

パターンの先頭はpです。
検索する文字列「perfect」の先頭はpであり、 マッチします。

次のパターンはy?です。
ポイントは「?」です。正規表現で、「?」はその直前の文字またはグループが「0回または1回」出現する意味があります。
y?はp~やpy~のように、yがなくてもあってもマッチします。
今回の検索する文字列「perfect」で2文字目はyではないですが、マッチします。

次のパターンは ( th | ers )です。
ポイントは2つあります。
1つめは、( )です。正規表現で「( ) 」は1つのグループという意味になります。
2つめは、 | です。正規表現で「 | 」はまたはという意味になります。
( th | ers ) の場合は thまたはersが出現すればマッチするということです。
今回の検索する文字列「perfect」ではerfという順番であり、thとersどちらのパターンにもマッチしません。

エラーになります。

( ) と | は正規表現においてとても大事です。覚えておきましょう!

練習問題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(“pythomic”)

答えはコチラをクリック!

答え:
誤)pythomic
正)pythonic

ポイント(クリック!)
正規表現とは〇〇

Pythonで正規表現を扱うにはreモジュールを使用します。

・’py?(th|ers)oni?(a[lmn]|c)?’ は今回の正規表現のパターンです。
re.IGNORECASE は大文字・小文字を区別しないという意味があります。

・search( 文字列 ) によって正規表現のパターンにマッチするか検索します。

パターンの先頭はpです。検索する文字列の先頭がpであればマッチします。
今回の検索する文字列「pythmic」で1文字目がpより、マッチします。

次のパターンはy?です。
今回の検索する文字列「pythmic」で2文字目がyより、マッチします。

次のパターンは ( th | ers )です。
今回の検索する文字列「pythmic」では3、4文字目にthがあり、マッチします。

次のパターンはoです。
今回の検索する文字列「pythmic」の5文字目はmであり、パターンにマッチしません。

エラーになります。

練習問題4

問題


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(“PYTHAN”)

答えはコチラをクリック!

答え:

誤)PYTHAN
正)PYTHON

ポイント(クリック!)
re.IGNORECASEとは〇〇

Pythonで正規表現を扱うにはreモジュールを使用します。

・’py?(th|ers)oni?(a[lmn]|c)?’ は今回の正規表現のパターンです。
re.IGNORECASE は大文字・小文字を区別しないという意味があります。

・search( 文字列 ) によって正規表現のパターンにマッチするか検索します

パターンの先頭pです。
検索する文字列「PYTHAN」の先頭はPです。re.IGNORECASEより、大文字のPはマッチします

次のパターンはy?です。
今回の検索する文字列「PYTHAN」で2文字目はYです。re.IGNORECASEより、大文字のYはマッチします。

次のパターンは ( th | ers )です。
今回の検索する文字列「PYTHAN」では3、4文字目はTHです。re.IGNORECASEより、大文字のTHはマッチします。

次のパターンはoです。
今回の検索する文字列「PYTHAN」の5文字目はAであり、パターンにマッチしません。

エラーになります。

re.IGNORECASE がコード中に書いてあるかどうか必ず確認しましょう!

理解度チェック

問題

import re
prog = re.compile(r'py?(th|ers)oni?(a[lmn]|c)?', re.IGNORECASE)
[ア]
if ret is None:
    print("エラー")
else:
    print(ret[0])

これは正規表現を用いたコードです。
[ア]へ追加するとエラーになるコードの番号を選びましょう。

1、ret = prog.search(“personal”)
2、ret = prog.search(“pythmian”)
3、ret = prog.search(“PYTHONIC”)

4、ret = prog.search(“python”)
5、ret = prog.search(“The zen of Python”)

答えはコチラをクリック!

答え:2番

ポイント(クリック!)
正規表現のパターンとは〇〇

Pythonで正規表現を扱うにはreモジュールを使用します。

・’py?(th|ers)oni?(a[lmn]|c)?’ は今回の正規表現のパターンです。
・re.IGNORECASE は大文字・小文字を区別しないという意味があります。

今回の正規表現のパターンについてみていきましょう。

パターンの先頭はPです。検索する文字列の先頭がpであればマッチします。

次のパターンはy?です。
ポイントは「?」です。正規表現で、「?」はその直前の文字またはグループが「0回または1回」出現する意味があります。
y?の場合はp~やpy~のように、yがなくてもあってもマッチするということです。

次のパターンは ( th | ers )です。
ポイントは2つあります。
1つめは、( )です。正規表現で「( ) 」は1つのグループという意味になります。
2つめは、 | です。正規表現で「 | 」はまたはという意味になります。
( th | ers ) の場合は thまたはersが出現すればマッチします。

次のパターンは oni? です。
正規表現で、「」はその直前の文字またはグループが「0回または1回」出現する意味があります。
oni?の場合は、on~やoni~のようにiはなくてもあってもマッチします。

次のパターンは (a [ lmn ] | c ) ? です。
正規表現で「()」は1つのグループという意味になります。
正規表現で「 | 」はまたはという意味になります。
正規表現で「 [ ] 」は[ ] の中のいずれかの文字という意味になります。
a [ lmn ] だと、 al、am、anのいずれかであればマッチするです。
a [ lmn ] | c  だと、( al、am、anのいずれか )またはcであればマッチするというルールになりますね。
しかし、最後に「?」がついてます。
正規表現で、「」はその直前の文字またはグループが「0回または1回」出現するという意味でした。
ですので、(a [ lmn ] | c ) ?は、( al、am、anのいずれか )またはc があってもなくてもマッチするというルールになります。

今回のコードについて振り返りましょう!
検索する文字列が「python」の場合です。

import re  #1
prog = re.compile(r'py?(th|ers)oni?(a[lmn]|c)?', re.IGNORECASE)  #2
ret = prog.search("python")  #3
if ret is None:  #4
    print("エラー")
else:  #5
    print(ret[0])

#1 正規表現を扱うためのライブラリreをインポートする
#2 変数progにコンパイルした正規表現パターンを代入する
#3 prog(コンパイルされた正規表現)を使い、文字列"python"内でパターンを検索する。マッチが見つかると変数retに格納される
#4 もしマッチが見つからなければ「エラー」と表示する
#5 マッチが見つかれば最初にマッチした結果を出力する

実行結果は

今回のポイント

今回のポイントを振り返りましょう!

ポイント(クリック!)
正規表現とは〇〇

Pythonで正規表現を扱うにはreモジュールを使用します。

・’py?(th|ers)oni?(a[lmn]|c)?’ は今回の正規表現のパターンです。
re.IGNORECASE は大文字・小文字を区別しないという意味があります。

・search( 文字列 ) によって正規表現のパターンにマッチするか検索します。

パターンの先頭はpです。
ですが、検索する文字列「iython」は i から始まるため、マッチしません。


正規表現のパターンにマッチするかどうかの問題は問題によって文字列が変わります!
自分で文字列や正規表現を作ってみると理解度もupします!

ポイント(クリック!)
正規表現における( )や | は〇〇

Pythonで正規表現を扱うにはreモジュールを使用します。

・’py?(th|ers)oni?(a[lmn]|c)?’ は今回の正規表現のパターンです。
re.IGNORECASE は大文字・小文字を区別しないという意味があります。

・search( 文字列 ) によって正規表現のパターンにマッチするか検索します。

パターンの先頭はpです。
検索する文字列「perfect」の先頭はpであり、 マッチします。

次のパターンはy?です。
ポイントは「?」です。正規表現で、「?」はその直前の文字またはグループが「0回または1回」出現する意味があります。
y?の場合はp~やpy~のように、yがなくてもあってもマッチします。
今回の検索する文字列「perfect」で2文字目はyではないですが、マッチします。

次のパターンは ( th | ers )です。
ポイントは2つあります。
1つめは、( )です。正規表現で「( ) 」は1つのグループという意味になります。
2つめは、 | です。正規表現で「 | 」はまたはという意味になります。
( th | ers ) の場合は thまたはersが出現すればマッチするということです。
今回の検索する文字列「perfect」ではerfという順番であり、thとersどちらのパターンにもマッチしません。

エラーになります。

( ) と | は正規表現においてとても大事です。覚えておきましょう!

ポイント(クリック!)
正規表現とは〇〇

Pythonで正規表現を扱うにはreモジュールを使用します。

・’py?(th|ers)oni?(a[lmn]|c)?’ は今回の正規表現のパターンです。
re.IGNORECASE は大文字・小文字を区別しないという意味があります。

・search( 文字列 ) によって正規表現のパターンにマッチするか検索します。

パターンの先頭はpです。検索する文字列の先頭がPであればマッチします。
今回の検索する文字列「pythmic」で1文字目がpより、マッチします。

次のパターンはy?です。
今回の検索する文字列「pythmic」で2文字目がyより、マッチします。

次のパターンは ( th | ers )です。
今回の検索する文字列「pythmic」では3、4文字目にthがあり、マッチします。

次のパターンはoです。
今回の検索する文字列「pythmic」の5文字目はmであり、パターンにマッチしません。

エラーになります。

ポイント(クリック!)
re.IGNORECASEとは〇〇

Pythonで正規表現を扱うにはreモジュールを使用します。

・’py?(th|ers)oni?(a[lmn]|c)?’ は今回の正規表現のパターンです。
re.IGNORECASE は大文字・小文字を区別しないという意味があります。

・search( 文字列 ) によって正規表現のパターンにマッチするか検索します。

パターンの先頭はpです。
検索する文字列「PYTHAN」の先頭はPです。re.IGNORECASEより、大文字のPはマッチします

次のパターンはy?です。
今回の検索する文字列「PYTHAN」で2文字目はYです。re.IGNORECASEより、大文字のYはマッチします。

次のパターンは ( th | ers )です。
今回の検索する文字列「PYTHAN」では3、4文字目はTHです。re.IGNORECASEより、大文字のTHはマッチします。

次のパターンはoです。
今回の検索する文字列「PYTHAN」の5文字目はAであり、パターンにマッチしません。

エラーになります。

re.IGNORECASE がコード中に書いてあるかどうか必ず確認しましょう!

ポイント(クリック!)
正規表現のパターンとは〇〇

Pythonで正規表現を扱うにはreモジュールを使用します。

・’py?(th|ers)oni?(a[lmn]|c)?’ は今回の正規表現のパターンです。
・re.IGNORECASE は大文字・小文字を区別しないという意味があります。

今回の正規表現のパターンについてみていきましょう。

パターンの先頭はpです。検索する文字列の先頭がpであればマッチします。

次のパターンはy?です。
ポイントは「?」です。正規表現で、「?」はその直前の文字またはグループが「0回または1回」出現する意味があります。
y?の場合はp~やpy~のように、yがなくてもあってもマッチするということです。

次のパターンは ( th | ers )です。
ポイントは2つあります。
1つめは、( )です。正規表現で「( ) 」は1つのグループという意味になります。
2つめは、 | です。正規表現で「 | 」はまたはという意味になります。
( th | ers ) の場合は thまたはersが出現すればマッチします。

次のパターンは oni? です。
正規表現で、「」はその直前の文字またはグループが「0回または1回」出現する意味があります。
oni?の場合は、on~やoni~のようにiはなくてもあってもマッチします。

次のパターンは (a [ lmn ] | c ) ? です。
正規表現で「()」は1つのグループという意味になります。
正規表現で「 | 」はまたはという意味になります。
正規表現で「 [ ] 」は[ ] の中のいずれかの文字という意味になります。
a [ lmn ] だと、 al、am、anのいずれかであればマッチするです。
a [ lmn ] | c  だと、( al、am、anのいずれか )またはcであればマッチするというルールになりますね。
しかし、最後に「?」がついてます。
正規表現で、「」はその直前の文字またはグループが「0回または1回」出現するという意味でした。
ですので、(a [ lmn ] | c ) ?は、( al、am、anのいずれか )またはc があってもなくてもマッチするというルールになります。

今回のコードについて振り返りましょう!
検索する文字列が「python」の場合です。

import re  #1
prog = re.compile(r'py?(th|ers)oni?(a[lmn]|c)?', re.IGNORECASE)  #2
ret = prog.search("python")  #3
if ret is None:  #4
    print("エラー")
else:  #5
    print(ret[0])

#1 正規表現を扱うためのライブラリreをインポートする
#2 変数progにコンパイルした正規表現パターンを代入する
#3 prog(コンパイルされた正規表現)を使い、文字列"python"内でパターンを検索する。マッチが見つかると変数retに格納される
#4 もしマッチが見つからなければ「エラー」と表示する
#5 マッチが見つかれば最初にマッチした結果を出力する

実行結果は

                               参考資料:Pythonによるあたらしいデータ分析の教科書第2版

次回は

次回は「Pythonと環境」のPythonの基礎で文字列操作について学んでいきます!

目次