講義の冒頭で今西先生より
「みなさん、正規表現 という言葉をきいたことありますか?」
という質問があります。
正直生まれて初めて聞いた言葉でした。
例えて説明されてたのが、
文字列A
文字列B
文字列C
というのがあってその中で
これらに共通する部分があって
それらを記号で表現するのが
正規表現らしいです。
今西先生も
習うより、慣れろとおっしゃってますので
コードを書きながら学習したいと思います。
import re
sentence ='aaa abc aac abb abab 123 112 111'
pattern = 'ab.'
results = re.findall(pattern,sentence)
results
['abc', 'abb', 'aba']
まずimportします。
re
とはregexの略で正規表現に関するライブラリです。
文字列の入ったsentenceを定義。
検索する文字列のパターンを定義。
pattern = 'ab.'
でここで出てくのが
【正規表現の参照リスト】です。
文字によって予め決められた内容があって
. は[任意の一文字]
では実際に定義した文字列sentenceから
patternに当てはまる文字を抽出します。
reにもいろいろな関数がありまして
match():文字列の先頭がマッチするかチェック、抽出
search():先頭に限らずマッチするかチェック、抽出
findall():マッチする部分すべてをリストで取得
などがあります。
ここではfindall()を使います。
patternをいろいろ変えてみます。
今回は3文字で抽出していますので
4文字の文字列も3文字で抽出されます。
pattern = 'a.b'
results = re.findall(pattern,sentence)
results
['abb']
pattern = 'a..'
results = re.findall(pattern,sentence)
results
['aaa', 'abc', 'aac', 'abb', 'aba']
次はab|aaで抽出します。
先ほど出てきた
【正規表現の参照リスト】
をつかってみてみると
| 和集合(または)
となっています。実行してみます。
pattern = 'ab|aa'
results = re.findall(pattern,sentence)
results
results
['aa', 'ab', 'aa', 'ab', 'ab', 'ab']
ab aa 両方に当てはまる文字列を抽出できました。
そのほかにも
【正規表現の参照リスト】
の中の物をいろいろ試すと面白いです。
コメント