超絶簡単 Pythonでの正規表現
r'a'表記
raw string表記を示します。余分な\を省くことが可能です。
例えば改行はr'\n'とすれば正規表現として扱うことが出来ます。
メソッド
メソッド 役割 match 正規表現が文字列の先頭と一致するかチェック search 正規表現による文字列を走査 split 正規表現に一致するもので配列に分離 sub 正規表現による置換 subn subと同じだが、個数を制限可能
matchとsearch
※matchとsearchでは役割が異なるので注意が必要です。
matchは先頭との一致、searchは最後まで走査を行います。
searchとmatchにより一致したMatchObjectの属性は次のものになります。
属性 内容 group 一致した文字列の取得 start 一致した文字列の開始位置 end 一致した文字列の終了位置 span 一致した文字列の開始、終了位置の組 サンプルコードを以下に挙げておきます。group(1)とすることで後方参照が可能です。
#! /usr/bin/env python # -*- coding:utf-8 -*- import re print re.match( r'o', 'google vs yahoo' ) #None print re.search( r'oo', 'google vs yahoo' ).group() #oo print re.match( r'go', 'google vs yahoo' ).start() # 0 print re.search( r'google', 'google vs yahoo' ).end() #6 print re.search( r'(([a-z]+)\svs\s([a-z]+))', 'google vs yahoo' ).group(1) #google vs yahoo print re.search( r'(([a-z]+)\svs\s([a-z]+))', 'google vs yahoo' ).group(2) #google print re.search( r'(([a-z]+)\svs\s([a-z]+))', 'google vs yahoo' ).group(3) #yahoo print re.search( r'([a-z]+\svs\s[a-z]+)', 'google vs yahoo' ).span() #(0, 15)
分離
splitメソッドにより正規表現での文字列の分離になります。
#! /usr/bin/env python # -*- coding:utf-8 -*- import re data = re.split( r',', 'google,yahoo,gree,mixi' ) for i in data: print i #出力結果 ''' google yahoo gree mixi '''
置換
正規表現と後方参照を用いて置換を行います。
sub関数の第一引数でグループ化した正規表現が、第二引数の内部で\1などのような形式で後方参照することが出来ます。#! /usr/bin/env python # -*- coding:utf-8 -*- import re print re.sub( r'(http.*:google.)(com)', r'\1co.jp', 'http://www.google.com' ) #出力結果 #http://www.google.com
コンパイル
正規表現をコンパイルすることが出来ます。コンパイルすることによって後で記述するフラグを利用することが可能です。もしかしたら速度的にも速いかもしれません。
re.comple( 正規表現 ).search()などの法則での記述です。#! /usr/bin/env python # -*- coding:utf-8 -*- import re print re.compile( 'o' ).match( 'google vs yahoo' ) print re.compile( 'o' ).search( 'google vs yahoo' ).group()コンパイル時には以下のフラグを設定出来ます。
フラグ 説明 DOTALL, S .が改行も含めて全てのマッチングとさせる IGNORECASE, I 大小文字区別無し LOCALE, L ロケールを考慮したマッチング MULTILINE, M 複数行にマッチング VERBOSE, X 冗長な正規表現 以下は例で、IGNORECASEを利用した場合になります。
#! /usr/bin/env python # -*- coding:utf-8 -*- import re print re.compile( 'google', re.I ).search( 'GOOGLE' ).group() #出力結果 #GOOGLE