ホームページ  >  記事  >  バックエンド開発  >  Python の正規表現に関する知識のまとめと共有

Python の正規表現に関する知識のまとめと共有

黄舟
黄舟オリジナル
2017-09-23 11:34:261406ブラウズ

この記事では、Python 正規表現の基本的な知識を紹介します。この記事の内容には、効率的な正規表現の作成方法や正規表現の最適化方法は含まれていません。これらのトピックについては、他のチュートリアルを参照してください。

1. 正規表現の構文

1.1 文字と文​​字クラス
1 特殊文字: .^$?+*{}[]()|
リテラル値を使用するには、上記の特殊文字をエスケープする必要があります
2。文字クラス
1. [] に含まれる 1 つ以上の文字を文字クラスといいます。文字クラスが照合時に数量指定子を指定しない場合は、そのうちの 1 つだけと照合されます。
2. 文字クラス内で範囲を指定できます、例えば [a-zA-Z0-9] は a ~ z、A ~ Z、0 ~ 9 の任意の文字を表します
3. 左角括弧の後には^ は、[^0-9] などの文字クラスの否定を意味し、数字以外の文字と一致できることを意味します。
4. 文字クラス内では、 を除き、他の特殊文字は特別な意味を持たなくなり、すべてリテラル値を表します。最初の位置に配置された ^ は否定を表し、他の位置に配置された ^ は ^ 自体を表し、中央に配置された - は範囲を表し、文字クラスの最初の文字として配置された - 自体を表します。

5. d s w などの文字クラス内で短縮メソッドを使用できます
3 短縮メソッド
改行文字を除く任意の文字に一致します re.DOTALL フラグがある場合は、改行を含む任意の文字に一致します。文字
dはUnicodeの数字に一致し、re.ASCIIが含まれている場合は0-9に一致します
DはUnicodeの非数字に一致します
sはUnicodeの空白に一致します、re.ASCIIが含まれている場合はtnrfvの1に一致します
SはUnicodeの非数字に一致します空白
wはUnicodeの単語文字に一致、re.asciiが含まれる場合は[a-zA-Z0-9_]のいずれかと一致
WはUnicodeの非モナド文字に一致

1.2量子
1の前の文字に一致します 0または1回
2. * 一致 前の文字と0回以上一致
3. + 前の文字と1回以上一致
4. {m}は前の式とm回一致します
5. {m,}は前の文字と一致します式は少なくとも m 回
6. {,n} は前の正規表現と最大 n 回一致します
7. {m,n} は前の正規表現と少なくとも m 回、最大 n 回一致します
注:
上記の数量子貪欲モードであり、可能な限り何度でも試行します。非貪欲モードに変更したい場合は、量指定子に ? を付けてグループ化してキャプチャします

1 () の役割:

1. をキャプチャします。 () 内の正規表現の内容をさらに処理するために、左括弧の後に ?: を付けることでこの括弧のキャプチャ機能をオフにすることができます
2. 正規表現の一部を結合して量指定子または |
を使用します 2 リアクションは次のことを指します以前の()でキャプチャされたコンテンツは、グループ番号からのバックリファレンスは、iniblesの名前を参照します。括弧の後に ?P を付け、山括弧で囲んだグループ名を入力して、(?P=name) を通じて参照します。 前に取得したもの。 (?Pw+)s+(?P=word) のように、繰り返された単語と一致します。
3 注:
後方参照は文字クラス [] では使用できません。

1.4 アサーションとマーカー
アサーションはどのテキストにも一致しませんが、アサーションが配置されているテキストに特定の制約を課すだけです
1 よく使用されるアサーション:
1. b は単語の境界に一致し、文字クラスに配置されますバックスペースを表す[]
2. BはASCIIタグの影響を受ける非単語境界に一致します
3. Aは先頭に一致します
4. ^は先頭に一致し、MULTILINEフラグがある場合は各改行文字の後に一致します
5. Zは末尾に一致します
6. $は末尾に一致し、MULTILINEフラグがある場合は各改行の前に一致します
7. (?=e) 肯定先読み
8. (?!e) 否定先読み
9 . (?<= e) ポジティブルックバック
10. (? 2 ルックバックの説明
先読み: exp1(?=exp2) exp1 の後の内容は exp2 と一致する必要があります
ネガティブ先読み: exp1 (?!exp2) exp1 の後ろ exp1 より前の内容は exp2 と一致することはできません

ただし、hello の後には world を続ける必要があります。は、「hello wangxing」と「hello world」の一致にのみ使用されます。後者の hello

1.5 条件一致

(?(id)yes_exp|no_exp): ID に対応する部分式が内容と一致する場合、一致します。 yes_exp に一致、そうでない場合は no_exp に一致

1.6 正規表現フラグ

1. 正規表現フラグには 2 種類あります 使い方
1. コンパイルメソッドに flag パラメータを渡すことで、 | メソッドを使用して複数のフラグを区切ることができます。 、 re.compile(r"#[da-f]{6}b", re.IGNORECASE|re.MULTILINE) など
2. 正規表現の前に (?flag) を追加して、正規表現にフラグを追加します。 (?ms)#[da-z]{6}b
2. 一般的に使用されるフラグ
re.A または re .ASCII なので、 b B s S w W d D はすべて、文字列が Assume であると想定します。文字列が ASCII であること
re.I または re.IGNORECASE は正規表現で大文字と小文字を無視します
re.M または re.MULTILINE 複数行のマッチングなので、各 ^ は各キャリッジ リターンの後に一致し、各 $ は各キャリッジ リターンの前に一致します
re.S または re.DOTALL は、キャリッジリターンを含む任意の文字との一致を可能にします
re.X または re.VERBOSE 正規表現で使用できます 式は複数行にまたがり、コメントも追加できますが、空白は追加する必要がありますデフォルトの空白は解釈されないため、s または [ ] で表すことができます。例:
re.compile(r"""
[^>]*? #srcの属性ではない
src= #src属性の先頭
( ?:
(?P["']) #左引用符
(?P[^1>]+?) #画像名
(?P=quote) # ",re.VERBOSE| re.IGNORECASE)

2. Python 正規表現モジュール


2.1 正規表現には文字列を処理するための 4 つの主要な関数があります


1. 文字列が正規表現の構文に準拠しているかどうかを確認するために一致し、通常は true を返します。または false

2. 文字列内の要件を満たすテキストを抽出するための正規表現を取得します

3. 検索文字列内の正規表現に一致するテキストを対応する文字列に置き換えます
4. 正規表現を使用して文字列を分割します式分割


2.2 Python の re モジュールで正規表現を使用する 2 つの方法


1. re.compile(r, f) メソッドを使用して正規表現オブジェクトを生成し、対応するメソッドを呼び出します。このアプローチの利点は、正規表現オブジェクトの生成後に複数回使用できることです。 2. re モジュールには、正規表現オブジェクトの各オブジェクト メソッドに対応するモジュール メソッドが存在します。渡される最初のパラメータは正規表現文字列です。このメソッドは 2.3 正規表現オブジェクトの一般的なメソッドに適しています。

1. rx.findall(s,start, end):
正規表現にグループ化がない場合、リストには一致するすべてのコンテンツが含まれます。の要素はタプルであり、サブグループ内で一致したコンテンツを含みますが、正規表現全体で一致したコンテンツは返しません
2. rx.finditer(s, start, end):
反復可能なオブジェクトを返します
を繰り返します。 iterable オブジェクトを呼び出し、毎回一致するオブジェクトを返します。一致するオブジェクトの group() メソッドを呼び出すと、指定したグループに一致するコンテンツが表示されます。 0 は正規表現全体に一致するコンテンツを示します
3. rx.search( s , start, end):
一致するオブジェクトが見つからない場合はNoneを返します
検索メソッドは一度だけ一致して停止し、それ以降は一致しません
4. rx.match(s, start, end):
文字列の先頭で正規表現が一致した場合は一致するオブジェクトを返し、そうでない場合はNone
5. rx.sub(x, s, m):
文字列を返します。一致する各位置を x に置換し、置換後の文字列を返します。m を指定すると、最大 m 回置換されます。 x には、/i または /g を使用できます。id には、キャプチャされたコンテンツを参照するためのグループ名または番号を指定できます。
モジュールメソッドre.sub(r, x, s, m)のxは関数が使えます。現時点では、キャプチャしたコンテンツをこの関数を通じてプッシュして処理し、一致したテキストを置き換えることができます。
6. rx.subn(x, s, m):
re.sub() メソッドと同じですが、違いはタプルを返す点で、その 1 つは結果文字列で、もう 1 つは結果文字列の数です。交換品。
7. rx.split(s、m):文字列の分割"(d)[a-z]+(d)")
s = "ab12dk3klj8jk9jks5"
result = rx.split( s)
Returns ['ab1', '2', '3', 'klj', '8' , '9', 'jks5']
8. rx.flags(): 正規表現のコンパイル時に設定されるフラグ
9. rx.pattern(): 正規表現のコンパイル時に使用される文字列


2.4 オブジェクトを照合するプロパティとメソッド


01. m.group(g, ...)

数値またはグループ名の一致を返す 取得する内容、デフォルトまたは0は式全体で一致した内容を示す 複数指定した場合はタプルを返します。 .02. m.groupdict(default) 辞書を返します。ディクショナリのキーはすべての名前付きグループのグループ名であり、値は名前付きグループによってキャプチャされたコンテンツです。デフォルト パラメータがある場合は、そのパラメータが、そのグループに参加していないグループのデフォルト値として使用されます。マッチング。

03. m.groups(デフォルト)
タプルを返します。コンテンツをキャプチャするすべてのサブグループが 1 から含まれます。デフォルト値が指定されている場合、この値はコンテンツをキャプチャしないグループの値として使用されます

04. m.lastgroup()

コンテンツと一致する名前、または名前が使用されていない場合は、None (一般的には使用されません)を返します
05. m.lastindex()
コンテンツと一致する最も大きい番号のキャプチャグループの番号、そうでない場合は、なしを返します。
06. m.start(g):
現在一致しているオブジェクトのサブグループを文字列内のその位置からマッチングします 現在のグループが一致に参加していない場合は-1が返されます
07. m.end( g)
現在の一致 オブジェクトのサブグループ化は文字列のその位置で終了します。現在のグループが一致に参加していない場合は、-1 が返されます。 m.span()
内容が m のタプルを返します。 start(g)と m.end(g)の戻り値
09. m.re()
この一致オブジェクトを生成する正規表現
10. m.string()
一致または一致の検索に渡される文字列
11. m.pos()
検索の開始位置。つまり、文字列の先頭、または start で指定した位置 (一般的には使用されません)
12. m.endpos()
検索の終了位置。つまり、文字列の終了位置、またはendで指定した位置(一般的には使用されません)


2.5 まとめ

1. 正規表現マッチング関数については、Pythonにはtrueとfalseを返すメソッドはありませんが、matchメソッドやsearchメソッドの戻り値がNoneかどうかで判断できます
2. 正規表現検索関数については、 1 回だけ検索する場合は、search メソッドまたは match メソッドによって返される一致オブジェクトを使用して取得できます。複数の検索の場合は、反復アクセスのために finditer メソッドによって返される反復可能オブジェクトを使用できます。 、正規表現オブジェクト メソッドの sub または subn を使用することも、re モジュール メソッド sub または subn を通じて実装することもできます。違いは、モジュールの sub メソッドの置換テキストを関数を使用して生成できることです。
4. 正規表現分割機能については、正規表現オブジェクトメソッドの分割を使用できます。正規表現オブジェクトがグループ化されている場合、グループによってキャプチャされたコンテンツも返されるリストに配置されることに注意してください

以上がPython の正規表現に関する知識のまとめと共有の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。