Pythonに限らずプログラミングを学んでいると、
正規表現を学ぶ必要が出てきます。
一見すると、意味不明な言葉の単語の羅列ですが、
使いこなせるようになると非常に便利なツールとなります。
正規表現を学ぶには、
の二種類をわけて学ぶと効率的です。
また、正規表現モジュールも以下の3つに分けて学習するとわかりやすくなります。
ここでは最初の基本的な機能について説明します。
Pythonで正規表現モジュール
Pythonの正規表現モジュールはreです。
(標準モジュールですので、スグに使用可能です。)
reで使用するメソッドで基本的なものは4種類ありますが、
返す値に違いがあるので、区別して覚えると理解しやすくなります。
メソッド | 戻り値 |
---|---|
search | MatchObject/None |
match | MatchObject/None |
split | リスト |
findall | リスト |
match,search
matchとsearchの同じ所
どちらもMatchObjectを返します。
MatchObjectに関しては、以下の特性を覚えておけば大丈夫です。
- ブール値Trueを持つ
.start()
と.end()
でマッチした開始位置と終了位置を返す.span()
で(開始位置,終了位置)のタプルを返す.group()
でマッチしたパターンを返す
searchとmatchはパターンに適合するものがなければNoneを返します。
マッチした場合も、返ってくるのはMatchObjectで、そこから.group()
で文字列を取り出すところが戸惑いやすいかもしれません。
import re reg = "ab" text = "abaaaaaa" re.match(reg,text) # これはMatchObject re.match(reg,text).group() #'ab' re.match(reg,text).span() #(0,1)
matchとsearchの違い
matchとsearchの違いは、マッチする位置です。
matchは与えられた文字列の先頭がマッチした場合のみ、MatchObjectを返します。
searchは文字列の中の最初にマッチした位置のMatchObjectを返します。
split,findall
splitとfindallの区別
splitとfindallはマッチした文字列を格納したリストで返します。
この2つの違いはsplitはマッチした部分で分割したリストを返します。
(そのため、グループを使用しないかぎりマッチした値は帰りません)
マッチした部分が隣接している場合は、''が返ります。
対してfindallはマッチしたもののみを返します。
re.split("ab","ababaaaab") #['','','aaa','']<=ababが隣接した部分は'',''になる re.findall("ab","ababaaaab") #['ab','ab','ab']