Python入門編の正規表現

6075 ワード

正規表現には、一致と置換の2つの基本的な操作があります.
一致とは、テキスト文字列内で一致する特殊な式を検索することです.
置換とは、特定の式に一致する文字列を1つの文字列で検索して置換することです.  1.基本要素正規表現は、一致動作を実行するために一連の特殊文字要素を定義します.
正規表現の基本文字
文字
説明
text
一致text文字列
.
改行以外の任意の文字を一致させる
^
文字列の先頭に一致
$
文字列の末尾に一致
正規表現では、マッチング制限子を使用してマッチングの回数を制約することもできます.一致修飾子
最大照合
最小照合
説明
*
*
一致する前の式を0回または複数回繰り返します.
+
+
前の式を1回または複数回繰り返す
一致する前の式を0回または1回繰り返します.
{m}
{m}
正確な繰り返しマッチング前の式m回
{m,}
{m,}
マッチング前の式を少なくともm回繰り返す
{m,n}
{m,n}
少なくとも一致する前の式をm回繰り返し、最大で一致する前の式をn回繰り返します.
前述したように、「.*」は最大一致であり、ソース文字列のすべての一致する文字列に一致します.「.*」は最小一致で、最初に表示された文字列のみが一致します.例えば、d.*gは、dで始まる任意の文字列、gで終わる文字列、例えば「debug」と「debugging」、さらには「dog is walking」に一致することができる.d.*gは「debug」にのみ一致し、「dog is walking」文字列では「dog」にのみ一致します.より複雑なマッチングでは、グループと演算子を使用できます.グループと演算子
グループ
説明
[...]
[a-z],[1-9]または[,./;']などのコレクション内の文字を一致させる
[^...]
セット以外のすべての文字を一致させ、反転操作に相当します.
A|B
一致式AまたはB、OR操作に相当
(...)
(a-b]+)([A-Z]+)([1-9]+)などの式のグループ
umber
number式グループ内のテキストを一致させる
特定の文字タイプまたは文字環境に一致する特殊な文字シーケンスのセットがあります.例えば、bが文字境界に一致すると、foodbは「food」、「zoofod」に一致し、「foodies」と一致しません.特殊文字列
文字
説明
\A
文字列の先頭のみ一致
\b
単語の境界を一致させる
\B
単語の非境界を一致させる
\d
r'[0-9]'に等しい任意の10進数文字を一致させる
\D
r'[^0-9]'に等しい任意の非10進数文字を一致させる
\s
任意のスペース文字(スペース記号、tabタブ、改行記号、折り返し記号、改ページ記号、垂直線記号)を一致させます.
\S
任意のスペース以外の文字を一致させる
\w
任意の文字に一致
\W
任意のアルファベット以外の文字を一致させる
\Z
文字列の末尾のみ一致
\\
反斜線文字の一致
特定のイベントを宣言する声明(assertion)があります.正規表現宣言
宣言
説明
( iLmsux)
空の文字列に一致し、iLmsux文字は次の表の正規表現修飾子に対応します.
( :...)
カッコ内で定義された式と一致しますが、文字グループテーブルは入力されません.
( P)
カッコ内で定義された式に一致しますが、一致する式はnameで識別されるシンボルグループとしても使用できます.
( P=name)
前に命名した文字グループに一致するすべてのテキストを一致させます.
( #...)
丸カッコ内の内容を無視するコメントを入力します.
( =...)
指定したテキストが次の正規表現要素と一致する場合、その間に余分なテキストがなければ一致します.これにより、正規表現の残りの部分の解析に影響を与えることなく、1つの式で先行操作を行うことができます.「マーティン」が「ブラウン」に続くと、「マーティン(=ブラウン)」は「マーティン」にのみマッチする.
( !...)
指定した式が次の正規表現要素と一致しない場合にのみ一致します(=...)に表示されます.
( <=...)
文字列の現在位置の接頭辞文字列が指定されたテキストである場合、一致し、式全体が現在位置で終了します.例えば(<=abc)def式は「abcdef」と一致する.このマッチングは、接頭辞文字数の正確なマッチングです.
(
文字列の現在位置の接頭辞文字列が指定された本文でない場合、一致します(<=...)に表示されます.
正規表現では、正規表現の実行方法に影響を与える処理フラグもサポートされています.プロセスフラグ
ひょうしき
説明
IまたはIGNORECASE
式の大文字と小文字を無視してテキストを一致させます.
2.操作
reモジュールを使用すると、pythonで正規式を使用して文字列を検索、抽出、置換できます.例:re.search()関数は、MatchObjectオブジェクトを返す基本的な検索操作を実行できます.re.findall()関数は、一致リストを返します. 
 
  
>>> import re
>>> a="this is my re module test"
>>> obj = re.search(r'.*is',a)
>>> print obj
<_sre.sre_match object="" at="">
>>> obj.group()
'this is'
>>> re.findall(r'.*is',a)
['this is']

MatchObjectオブジェクトメソッド
方法
説明
expand(template)
テンプレート内の反斜線で定義された内容を展開します.
m.group([group,...])
一致するテキストを返します.メタグループです.このテキストは、指定されたgroupまたはインデックス番号で定義されたグループと一致するテキストであり、グループ名がない場合、すべての一致を返します.
m.groups([default])
パターン内のすべてのグループに一致するテキストを含むメタグループを返します.defaultパラメータが与えられた場合、defaultパラメータ値は、与えられた式と一致しないグループの戻り値です.defaultパラメータのデフォルト値はNoneです.
m.groupdict([default])
一致するすべてのサブグループを含む辞書を返します.defaultパラメータが与えられている場合、その値は不一致グループの戻り値です.defaultパラメータのデフォルト値はNoneです.
m.start([group])
指定したgroupの開始位置を返すか、すべて一致する開始位置を返します.
m.end([group])
指定したgroupの終了位置を返すか、すべて一致する終了位置を返します.
m.span([group])
与えられたグループまたは完全な一致式(m.start(group),m.end(group))のリストに等価な2つの要素グループを返します.
m.pos
match()またはsearch()関数に渡されるpos値.
m.endpos
match()またはsearch()関数に渡されるendpos値.
m.lastindex
m.lastgroup
m.re
このMatchObjectオブジェクトの正規オブジェクトを作成
m.string
match()またはsearch()関数に提供される文字列.
sub()またはsubn()関数を使用して、文字列上で置換操作を実行します.sub()関数の基本フォーマットは、sub(pattern,replace,string[,count])の例です.
 
 
  
>>> str = 'The dog on my bed'
>>> rep = re.sub('dog','cat',str)
>>> print rep
The cat on my bed

replaceパラメータは関数を受け入れることができます.置換回数を取得するにはsubn()関数を使用します.subn()関数は、置換されたテキストと置換回数を含むメタグループを返します.同じ正規式で複数回のマッチング操作を行う必要がある場合は、正規式を内部言語にコンパイルし、処理速度を向上させることができます.コンパイル正規式はcompile()関数で実現される.compile()関数の基本フォーマットは、compile(str[,flags])strがコンパイルする正規列を表し、flagsが修飾フラグである.正規式がコンパイルされた後、複数の方法と属性を持つオブジェクトが生成されます.正規オブジェクトメソッド/プロパティ
メソッド/プロパティ
説明
r.search(string[,pos[,endpos]])
同じsearch()関数ですが、この関数では検索の開始点と終了点を指定できます.
r.match(string[,pos[,endpos]])
match()関数と同じですが、検索の開始点と終了点を指定できます.
r.split(string[,max])
同split()関数
r.findall(string)
同findall()関数
r.sub(replace,string[,count])
同sub()関数
r.subn(replace,string[,count])
同subn()関数
r.flags
オブジェクトの作成時に定義されたフラグ
r.groupindex
r'(Pid)'で定義されたシンボルグループ名をグループ番号の辞書にマッピングする
r.pattern
オブジェクトの作成時に使用するモード
エスケープ文字列はre.escape()関数.getattrによるオブジェクト参照の取得
 
  
>>> li=['a','b']
>>> getattr(li,'append')
>>> getattr(li,'append')('c')          # li.append('c')
>>> li
['a', 'b', 'c']
>>> handler=getattr(li,'append',None)
>>> handler

>>> handler('cc')                      # li.append('cc')
>>> li
['a','b','c','cc']
>>>result = handler('bb')
>>>li
['a','b','c','cc','bb']
>>>print result
None