データ分析実践
上級問題チェック
問題 32 /40
正規表現に関するコードで、結果が「['03', '1234', '5678']」にならないものはどれか。
reモジュールをインポートしているものとする。
選択 1
pattern = re.compile('[-()]')
pattern.split('03-1234-5678')
選択 2
pattern = re.compile('[\s]')
pattern.split('03 1234 5678')
選択 3
pattern = re.compile('\d+')
pattern.findall('03-1234-5678')
選択 4
pattern = re.compile('[^()]')
pattern.findall('03(1234)5678')
解説
選択肢4が正解です。
【選択肢1】
pattern = re.compile('[-()]')
pattern.split('03-1234-5678')
▶︎
['03', '1234', '5678']
正しい記述です。
「[...]」は指定したいずれかの文字を表す特殊文字です。
ここでは「-」「(」「)」のいずれかで分割(split)して、リストを返します。
【選択肢2】
pattern = re.compile('\s')
pattern.split('03 1234 5678')
▶︎
['03', '1234', '5678']
正しい記述です。
「\s」は空白文字を表す特殊文字です。
ここでは空白文字で分割(split)してリストを返します。
【選択肢3】
pattern = re.compile('\d+')
pattern.findall('03-1234-5678')
▶︎
['03', '1234', '5678']
正しい記述です。
「\d+」は一つ以上の数字の繰り返しを表します。
findallメソッドは指定した正規表現にマッチした文字列をリストで返します。
【選択肢4】
pattern = re.compile('[^()]')
pattern.findall('03(1234)5678')
▶︎
['0', '3', '1', '2', '3', '4', '5', '6', '7', '8']
誤った記述です。
「[ ]」の中で「^」を使うと、除外の意味を持ちます。「[^()]」は、「(」と「)」以外の文字列を表します。
ここでは「0312345678」が対象となり、文字列を1つずつ判定するため、結果は「['0', '3', '1', '2', '3', '4', '5', '6', '7', '8']」になります。
選択肢3の場合は、「\d+」で「1文字以上の数字の繰り返し(まとまり)」を判定しているため、結果は「['03', '1234', '5678']」になります。
選択肢3の特殊文字が「\d+」ではなく「\d」だった場合は、選択肢4と同じ結果になります。
正規表現でよく使う特殊文字は以下となります。
■ 特殊文字
■ シーケンス
(公式書籍 p.235-236)

