記事のディレクトリ
モジュールレベルの機能
正規表現を使用しても、必ずしもパターンオブジェクトが作成されてから、そのマッチングメソッドが呼び出されるとは限りません。、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
にも設定されているI
とM
フラグ。
サポートされているコンパイルフラグの一部を以下に示します。
符号 | 意味 |
---|---|
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]
するだけでは、'é'
またはに一致しません'ç'
。システムがフランスの地域環境に適切に設定されている場合、C
言語関数はプログラムに通知する'é'
か'ç'
、文字と見なす必要があります。正規表現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キー、コメント)