データ分析実践
中級問題チェック
問題 32 /40
正規表現のパターンマッチングで使う特殊文字について、正しい説明はどれか。
選択 1
\d 数字
^ 先頭
+ 1文字以上の繰り返し
? 0回か1回の繰り返し
選択 2
\w 数字
$ 先頭
. 任意の一文字
{m} m回の繰り返し
選択 3
\s 空白文字
+ 0文字以上の繰り返し
[...] 指定したいずれかの文字
(x|y) xかyの選択
選択 4
\W 英数字以外
$ 末尾
* 0文字以上の繰り返し
^[...] 指定したいずれかの文字以外
解説
選択肢1が正解です。
【選択肢1】
\d 数字
^ 先頭
+ 1文字以上の繰り返し
? 0回か1回の繰り返し
正しい説明です。
【選択肢2】
\w 数字
$ 先頭
. 任意の一文字
{m} m回の繰り返し
誤った説明です。
「\w」は数字ではなく任意の英数字です。
数字は「\d」です。
また、「$」は末尾で、先頭は「^」です。
【選択肢3】
\s 空白文字
+ 0文字以上の繰り返し
[...] 指定したいずれかの文字
(x|y) xかyの選択
誤った説明です。
「+」は1文字以上の繰り返しです。
0文字以上の繰り返しは「*」です。
【選択肢4】
\W 英数字以外
$ 末尾
* 0文字以上の繰り返し
^[...] 指定したいずれかの文字以外
誤った説明です。
指定したいずれかの文字以外は「^[...]」ではなく「[^...]」です。
正規表現でよく使う特殊文字は以下となります。
■ 特殊文字
■ シーケンス
例えば次のように、文字列から電話番号を抽出する場合は、reモジュールのfindall関数を使います。
import re
sample = '住所 横浜市 電話 111-111-1111, 住所 名古屋市 電話 222-222-2222'
re.findall('[0-9]{3}-[0-9]{3}-[0-9]{4}', sample)
▶︎
['111-111-1111', '222-222-2222']
[0-9]が0123456789の集合で、{3}が3回の繰り返しです。
一部の文字を置き換える場合は、reモジュールのsub関数を使います。
import re
regex = re.compile(r'p+')
regex.sub('X', 'apple')
▶︎
'aXle'
re.compile(r'p+')で正規表現のオブジェクトを生成し、そのオブジェクトを使って置き換えています。「p+」が「pの1回以上の繰り返し」を指すため、appleの「pp」が「X」に置き換わります。
(公式書籍 p.235)

