このモジュールは、Perl と同様の正規表現マッチング操作を提供します。同じことが Unicode 文字列にも当てはまります。
正規表現は特殊な形式を表すため、またはエスケープ文字としてバックスラッシュ「 」を使用しますが、これは Python の構文と競合します。そのため、正規表現が「 」と一致する必要がある場合、Python は正規表現で「 」を表すために「 \\ 」を使用します。数式では、エスケープして " \ " に変える必要があります。また、Python 構文では、文字列内の各文字をエスケープする必要があるため、" \\ " になります。
上記の書き方は面倒だと思いませんか? 正規表現を読みやすくするために、Python は特別に設計した生の文字列を使用しないでください。ここには落とし穴があります。生の文字列は、r"n" など、文字列の接頭辞として「r」を使用します。これは、改行文字の代わりに 2 つの文字「」と「n」を表します。 Python で正規表現を記述する場合は、この形式をお勧めします。
ほとんどの正規表現操作は、モジュールレベルの関数または RegexObject メソッドと同じ目的を達成できます。また、正規表現オブジェクトを最初からコンパイルする必要はありませんが、実際的な微調整パラメータを使用することはできません。
1. 正規表現の構文
スペースを節約するため、ここでは説明しません。
2. March と search の違い
Python には、match と search という 2 つの異なる基本操作があります。一致は文字列の開始点から開始されますが、検索 (Perl のデフォルト) は文字列から一致を開始します。
注: 正規表現が「^」で始まる場合、一致と検索は同じです。 match は、一致した文字列が先頭から一致するか、pos パラメータの位置から一致できる場合にのみ成功します。次のように:
>>> re.match("c", "abcdef")
>>> " )
<_sre.SRE_Match オブジェクト 0x00A9A988>
>>> re.match("c", "cabcdef")
<_sre.SRE_Match オブジェクト 0x00A9AB80>
>>> re。 search ("c","cabcdef")
<_sre.SRE_Match オブジェクト at 0x00AF1720>>>> patterm = re.compile("c")
>>> " )
>>> patterm.match("abcdef",1)
>>> patterm.match("abcdef",2)
3. モジュールの内容
re.compile(pattern, flags=0)
正規表現をコンパイルして RegexObject オブジェクトを返すと、RegexObject を通じて match() メソッドと search() メソッドを呼び出すことができます物体。
prog = re.compile(pattern)
は、
result = re.match(pattern, string)
と同等です。
最初の方法は、正規表現の再利用を実現できます。
文字列内を検索して、正規表現と一致するかどうかを確認します。 _sre.SRE_Match オブジェクトを返すか、一致するものが見つからない場合は None を返します。
文字列の先頭が正規表現と一致するかどうか。 _sre.SRE_Match オブジェクトを返すか、一致するものが見つからない場合は None を返します。
正規表現を使用して文字列を分割します。正規表現を括弧で囲むと、一致する文字列もリストに含まれて返されます。 maxsplit は分離の回数です。maxsplit=1 は 1 回分離します。デフォルトは 0 で、回数に制限はありません。
>>> re.split('W+', '単語、単語、単語。')
>>> re.split('(W+)', '単語、単語、単語。')
['単語', ', ', '単語', ', ', '単語', '.', '']
> ;>> re.split('W+', '単語、単語。', 1)
['単語'、'単語、単語。']
>>> a-f]+', '0a3B9', flags=re.IGNORECASE)
注: 私は Python 2.6 を使用しています。ソース コードを見ると、split() には 2.7 で追加された flags パラメータがないことがわかりました。 。私はこの問題を何度も発見しました。公式ドキュメントがソース コードと矛盾している場合は、ソース コードを参照してその理由を見つける必要があります。
文字列の先頭または末尾に一致がある場合、返されるリストは空の文字列で始まるか空の文字列で終わります。
>>> re.split('(W+)', '...単語、単語...')
['', '...', '単語', ', ', '単語', '...', '']
文字列が一致しない場合は、文字列全体のリストが返されます。
>>> re.split("a","bbb")
['bbb']
re.findall(pattern, string, flags=0)
RE 一致を見つけるすべての部分文字列をリストとして返します。一致は左から右の順序で返されます。一致するものがない場合は、空のリストが返されます。
>>> re.findall("a","bcdef")
[]
['12 ', '32', '43', '3']
>>> 内の一致:
print match.group()
4. 正規表現Formulaオブジェクト
5. コンパイルフラグ
I IGNORECASE
L LOCALE
M MULTILINE
S DOTALL
X 冗長
このフラグにより、より柔軟な形式が提供されるため、正規表現の記述が理解しやすくなります。このフラグを指定すると、RE 文字列内の空白は、空白が文字クラス内またはバックスラッシュの後ろにない限り無視されます。これにより、RE をより明確に整理してインデントすることができます。また、RE にコメントを書き込むこともできますが、コメントはエンジンによって無視されます。コメントには「#」記号が付いていますが、この記号を文字列やバックスラッシュの後に置くことはできません。
最後に: 文字列メソッドを使用できる場合は、正規表現を選択しないでください。文字列メソッドの方が簡単で高速であるためです。
Python の re モジュールの正規表現操作に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。