Python正規表現のコンパイル済み正規表現(3)

モジュールレベルの機能

正規表現を使用しても、必ずしもパターンオブジェクトが作成されてから、そのマッチングメソッドが呼び出されるとは限りませ、REモジュールも提供するので、いくつかのグローバル機能を、例えばmatch()search()findall()sub()などが挙げられます。これらの関数の最初のパラメーターは正規表現文字列であり、パターンオブジェクトと同じ名前のメソッドは、他のパラメーターに対して同じパラメーターを取ります。戻り値は同じであり、Noneまたは一致するオブジェクトも返します。

>>> print(re.match(r'From\s+', 'From_Fish.com'))
None
>>> re.match(r'From\s+', 'From Fish.com')
<_sre.SRE_Match object; span=(0, 5), match='From '>

ここに画像の説明を挿入します
ここに画像の説明を挿入します

ここに画像の説明を挿入します
実際、これらの関数は、パターンオブジェクトを自動的に作成し、関連する関数呼び出すのに役立ちますまた、将来的にキャッシュ格納されているスキーマオブジェクトをコンパイルすると、すぐに呼び出しを行うことができます

したがって、これらのモジュールレベルの関数を直接使用する必要がありますか、それとも最初パターンオブジェクトをコンパイルしてから、パターンオブジェクトのメソッドを呼び出す必要がありますか?これは実際には、正規表現の周波数に依存して私たちのプログラムは場合。時折、正規表現を使用して、その後、世界的な機能をより便利にしている。私たちのプログラムがあれば、正規表現を使用して多くのことを(例えば、ループ内で))、され、あなたが使用することをお勧め後者の方法、事前コンパイルによって一部の関数呼び出しを節約できるためです。ただし、内部キャッシュメカニズムにより、ループの外側にある場合、2つの効率はほぼ同じです。

コンパイルフラグ

コンパイルフラグを使用すると、正規表現の動作方法を変更できますre次のモジュール、フラグは、2人の名前有するコンパイラ:フルネーム略称などIGNORECASE速記であるI(例えば、re.VERBOSE略ですre.X)。さらに、複数のフラグは、(ビアを同時に使用してもよい“|”)、例えば:re.I | re.Mにも設定されているIMフラグ。

サポートされているコンパイルフラグの一部を以下に示します。

符号 意味
ASCII、A \ w、\ b、\ s、\ dなどのエスケープ記号をASCII文字のみに一致させる
DOTALL、S これは、.改行を含め、任意のシンボルに一致します
IGNORECASE、 私 マッチングでは大文字と小文字は区別されません
ローカル、L 現在の言語(地域)設定をサポートする
MULTILINE、M マルチラインマッチング、インパクト^$
VERBOSE、X(for 'extended' 詳細な正規表現を有効にする

以下にその意味を詳しく説明しましょう。

A

ASCIIの
作りは\w\W\b\B\s\Sだけ一致したASCIIという完全なマッチングよりも文字、Unicode文字を。このフラグはUnicodeモードでのみ意味があり、バイトモードは無視されます。

S

改行を含む任意の文字に一致する
ようなDOTALL .このフラグが使用されていない場合、。改行文字を除くすべての文字に一致します。

IGNORECASE
文字クラスとテキスト文字列は、一致するときに大文字と小文字を区別しませんたとえば、正規表現[A-Z]は対応する小文字にも一致します。たとえば、fishな​​どはFishFISHCに一致する場合があります。設定しない場合LOCALE、言語(地域)設定の大文字化は考慮されません。

L

LOCALE
ので\w\W\b\Bに依存している現在の言語(地域)の環境ではなく、Unicodeデータベース

地域設定はC言語の機能であり、その主な機能は異なる言語間の違い排除することですたとえば\w+、単語を照合するために使用するフランス語のテキストを扱っている、単語を\w照合[A-Za-z]するだけでは、'é'またはに一致しません'&#231;'システムがフランスの地域環境に適切に設定されている場合、C言語関数はプログラムに通知する'é''&#231;'、文字と見なす必要があります。正規表現LOCALEの記号セットコンパイル\w+すると、フランス語で識別できますが、速度に影響します。

M

MULTILINEは
通常^のみ、文字列の先頭と一致し、文字列の末尾をこのフラグを設定すると、文字列の先頭だけでなく、各行の先頭にも一致します。文字列の末尾だけでなく、各行の末尾にも一致します。$^ $

バツ

VERBOSE
フラグを使用すると、正規表現をより適切に整理して記述できます。これは、このフラグを使用するとスペースが無視されるためです文字クラスに表示されるスペースと、円記号でエスケープされたスペースを除く)。このフラグでは、コメントを使用することもできます正規表現文字列。#記号の後の内容はコメントであり、一致するエンジンには送信されません(文字クラスに表示され、円記号でエスケープされている#を除く)。

以下はre.VERBOSEの使用法です。正規表現は多くの可読性を向上させるためのものではないことを確認します。

charref = re.compile(r"""
 &[#]                # 开始数字引用
 (
     0[0-7]+         # 八进制格式
   | [0-9]+          # 十进制格式
   | x[0-9a-fA-F]+   # 十六进制格式
 )
 ;                   # 结尾分号
""", re.VERBOSE)

ここに画像の説明を挿入します

VERBOSEフラグがない場合は、同じ正規表現を次のように記述できます。

charref = re.compile("&#(0[0-7]+|[0-9]+|x[0-9a-fA-F]+);")

ここに画像の説明を挿入します

説明:

どちらが読みやすいですか?(正規表現式では、VERBOSEがオンになっていないと、スペース、改行、およびTABキーを自由に追加できませんが、VERBOSE(詳細式モード)がオンになっている場合は、スペース、改行、およびTABキー、コメント)

おすすめ

転載: blog.csdn.net/CSNN2019/article/details/114482700