Pythonのreモジュール正規表現操作


このモジュールはPerlに類似した正規表現との整合動作を提供する。Unicode文字列も同様に適用されます。
正の表現は、バックスラッシュ「\」を使用して、特殊な形式または変換文字として使用します。ここでPythonとの文法的衝突があります。したがって、Pythonは「\\\\」を使って正規表現の「\」を表します。正の表現では、「\」にマッチする場合は、「\」を使って変換します。Python文法では、各文字列の「転換」が必要です。だから「\\\\\\」になります。
上記の書き方は面倒臭いのではないかと思いますが、正規表現をより読みやすくするために、Pythonはオリジナル文字列(raw string)を特別に設計しました。ファイルの経路を書く時はraw stringを使わないでください。ここに落とし穴があります。raw stringとは、「r」を文字列のプレフィックスとし、r「」のように、2文字の「\」と「n」を表し、改行符ではない。Pythonで正則表現を書く時はこのような形式がオススメです。
絶対多数の正規表現の操作はモジュール級関数やRegexObject法と同じ目的を達成することができます。また、正規表現オブジェクトをコンパイルする必要はありませんが、実用的な微調整パラメータは使用できません。
1.正規表現文法
紙面を節約するために,ここではもう述べない。
2.マッチとsearchの違い
Pythonは2つの異なるオリジナル操作を提供しています。マッチは文字列の始点から始まりますが、searchは文字列から任意にマッチします。
注意:正規表現が'^'の先頭の場合、matchとsearchは同じです。matchは、マッチした文字列の先頭だけでマッチしたり、posパラメータの位置からマッチしたりできる場合にのみ成功します。以下のとおりです
>>import re
>>re.match(「c」「abcdef」)
>>re.search(「c」「abcdef」)
〈_〉sre.SRE_Match object at 0 x 00 A 9 A 988>
>>re.match(「c」「cabcdef」)
〈_〉sre.SRE_Match object at 0 x 00 A 9 AB80>
>>re.search(「c」「cabcdef」)
〈_〉sre.SRE_Match object at 0 x 00 AF 1720>
>>patterm=re.com(「c」)
>>patterm.match(「abcdef」)
>>patterm.match(「abcdef」,1)
>>patterm.match(「abcdef」,2)
〈_〉sre.SRE_Match object at 0 x 00 A 9 AB80>
3.モジュールの内容
レ.com mpile(pattern,flags=0)
正規表現をコンパイルし、RegexObjectオブジェクトを返し、その後、RegexObjectオブジェクトでmatch()とsearch()メソッドを呼び出すことができます。
prog=re.co mpile(pattern)
result=prog.match(string)
かかと
result=re.match(pattern,string)
は等価です。
第一の方法は正規表現の再使用を可能にする。
re.search(pattern、string、flags=0)
文字列で検索します。正規表現にマッチするかどうかです。_に戻るsre.SRE_マッチオブジェクトがマッチしない場合は、Noneに戻ります。
RE.match(pattern、string、flags=0)
文字列の先頭が正規表現にマッチするかどうか。_に戻るsre.SRE_マッチオブジェクトがマッチしない場合は、Noneに戻ります。
re.split(pattern、string、maxsplit=0)
正規表現で文字列を分離します。括弧で正則表現を含めると、マッチした文字列もリストに入れて返します。maxsplitは分離の回数で、maxsplit=1は一回分離して、デフォルトは0で、回数を制限しません。
>>>re.split('\W+',words,words.')
['ワールド',words',words',words']
>>>re.split(\\W+),'Words,words,words.')
''Words',',words',',',words',''
>>>>re.split('\W+',words,worss.',1)
['Words',words,words.']
>>re.split('[a-f]+','0 a 3 B 9',flags=re.IGNORECASE)
注意:私が使っているPythonは2.6です。ソースコードを確認したら、split()はflagsのパラメータがなく、2.7はやっと増加しました。このような問題は一回以上発見されました。公式文書とソースコードが一致しない現象は異常を発見したら、ソースコードの中で原因を探すべきです。
文字列の開始または終了が一致すると、返されたリストは空の列で開始または終了します。
>>>re.split(\\W+)','words,words...')
['、'、',words',',',words',',''
文字列が一致しない場合、文字列全体のリストが返されます。
>>re.split(「a」「bb」)
['bb']
re.findll(pattern、string、flags=0)
REマッチングのすべてのサブストリングが見つかり、それらをリストとして返します。このマッチングは左から右へ秩序よく戻る。マッチがない場合は、空のリストに戻ります。
>>re.findll(「a」「bcdef」)
[]
>>re.findll(r"\d+","12 a 32 bc 43 jf 3")
''12''32'''43''3''
re.finditer(pattern、string、flags=0)
REマッチングのすべてのサブストリングが見つかりました。そしてそれらを1つのディズエバとして返します。このマッチングは左から右へ秩序よく戻る。マッチがない場合は、空のリストに戻ります。
>>>>it=re.finditer(r"\d+","12 a 32 bc 43 jf 3")
>>for match in it:
print match.group()
re.sub(pattern,repl,string,count=0,flags=0)
RE整合のすべてのサブストリングが見つかり、それを異なる文字列で置換します。オプションパラメータcountはモードマッチング後の最大回数です。countは非負の整数でなければなりません。デフォルト値は0です。すべてのマッチを置換します。マッチがない場合は、文字列は変更なく返されます。
re.subn(pattern,repl,string,count=0,flags=0)
re.sub法と同様に作用しますが、新しい文字列と置換実行回数を含む2つの要素グループが返されます。
re.escape(string)
文字列の非文字数を変換します。
re.purge()
キャッシュの正規表現を空にします。
4.正規表現オブジェクト
re.RegexObject
re.com ile()はRegexObjectオブジェクトに戻ります。
re.Match Object
group()はREでマッチングされた文字列を返します。
スタートの位置に戻ります。
end()はマッチング終了位置を返します。
span()は、マッチング(開始、終了)を含む元グループの位置を返します。
5.コンパイルフラグ
コンパイルフラグは正規表現のいくつかの動作を変更することができます。REモジュールには2つの名前が使用できます。1つはIGNORECASEのようなフルネームです。1つは略語で、1文字はIのような形です。もしあなたがPerlのパターンを知っているなら、アルファベットの形で同じアルファベットを使います。例えば、re.VERRBOSEの略語形式は、re.Xである。)複数のマークは、ビットOR-ingで指定できます。RE.I|re.MのようにIとMのフラグに設定される:
I
IGNORECASE
サイズと小文字のマッチングに敏感でないようにします。文字クラスと文字列がアルファベットにマッチするときは、大文字と小文字は無視されます。例えば、[A-Z]は小文字にもマッチしていますが、Spamは「Spam」、「spam」、または「spAM」にマッチしています。この小文字は現在の位置を考慮していません。
L
LOCALE
「w,」W,「b,および」Bに影響を与えることは,現在のローカライズ設定に依存する。
locarsはC言語ライブラリの中の一つの機能で、異なる言語を考慮する必要があるプログラミングに役立つものです。例えば、フランス語のテキストを処理している場合、「w+を使ってテキストにマッチしたいですが、」wは文字類[A-Za-z]だけにマッチします。「e」や「?」にはマッチしません。もしあなたのシステム構成が適切で、ローカライズされてフランス語に設定されているなら、内部のC関数はプログラム「e」にもアルファベットとして認識されるべきです。正規表現をコンパイルする時にLOCALEフラグを使うと、これらのC関数で「w後のコンパイルオブジェクト」を処理します。これはもっと遅くなりますが、ご希望のようにフランス語のテキストに合わせることもできます。
M
MULTILINE
(このとき^と$は解釈されません。彼らは4.1日に紹介されます。)
「^」を使用すると文字列の最初だけにマッチしますが、$は文字列の最後だけにマッチします。このフラグが指定された場合、「^」は文字列の開始と文字列の各行の開始にマッチします。同じように、$元文字は文字列の最後と文字列の最後にマッチします。
S
DOTALL
行の区切りを含めて、特殊文字を任意の文字に完全に一致させます。このマークがありません。「.」は改行以外の任意の文字にマッチします。
X
VERRBOSE
このフラグは、より柔軟なフォーマットを与えることにより、正規表現をより分かりやすく書くことができます。このフラグが指定されている場合、RE文字列の空白文字は文字クラスまたはバックスラッシュの後に無視されない限り、無視されます。これはあなたをより明確に組織し、インデントさせることができます。また、これらのコメントはエンジンによって無視されます。注記は「((xi)」で表されていますが、文字列やバックスラッシュの後には記号が使えません。
最後に文字列を使う方法があれば、正規表現を選択しないでください。文字列の方法がもっと簡単で速いからです。