Python正規表現-reモジュールの説明


概念
コンピュータサイエンスの概念として、正規表現は、正規表現は、通常、一定のルールを満たしているテキストを取得し、交換するために使用されています。正規表現は、文字列操作の一種の論理式であり、事前定義されたルール文字列を使用して文字列をフィルタリングし、論理的に処理します。

正規表現は、本質的には小さく、高度に専門化されたプログラミング言語です。Pythonでは、正規表現はreモジュールを介して実装されます。正規表現は、最初に対応する文字列の一致するセットのルールを指定し、次にreモジュールを介して何らかの方法で文字列を変更または分離できます。

正規表現パターンは、最初に一連のバイトコードにコンパイルされ、次にC言語で記述されたマッチングエンジンによって実行されるため、Python文字列処理コードを直接記述するよりもある程度高速です。ただし、すべての文字列照合を正規表現で実行できるわけではありません。単一の式を処理できる場合でも、非常に複雑になり、読みにくくなります。Pythonコードを直接記述することをお勧めします。

構成
正規表現は、正規表現で特別な意味を持つメタ
文字と通常の文字の2種類の文字で構成されます。

文字と構文:

構文の説明式の例一致例
共通文字一致自体Abcabc。newline
以外の任意の文字に一致\ n ac abc
\エスケープ文字a \ .c ac
[abcd] aまたはbまたはcまたはdに一致[abc] a
[0-9] 0から9までの任意の数字に一致します。これは[0123456789] [0-3] 1と同等です。
[\ u4e00- \ u9fa5]は任意の中国語文字に一致します[\ u4e00- \ u9fa5]中国語
[^ a0 =]は任意の文字を除く一致します0以外、= [^ abc] d
[^ az]は小文字以外の任意の文字に一致します[^ az] A
\ dは任意の数字に一致し、[0-9]と同等ですa \ dc a6c
\ Dは任意のAに一致します数字文字、[^ 0-9] a \ Dc abc
\ sと同等、空白文字と一致、[\ r \ n \ f \ t \ v] a \ sc ac
\ Sと同等、空白以外の文字と一致、同等to [^ \ r \ n \ f \ t \ v] a \ Sc aYc
\ wは任意の文字、数字、または下線に一致し、[a-zA-Z0-9_]と同等です。a\ wc a_c
\ Wは任意の1つに一致します。 [^ a-zA-Z0-9_]と同等の文字、数字、または下線a \ wc a * c
*前の文字と0回または無制限に一致するa * c c
+前の文字を1回または無制限に
一致させるa + c aaaac ?前の文字を0回または1回一致させるa?c ac
{m}前の文字をm回一致させるa {3} c aaac
{m、n} Aを一致させる前に文字mからn回、mnは省略できます。mnのデフォルト値はそれぞれ0回と無制限です。a{1,2} c aac
^は文字列の先頭に一致し、どの文字にも一致しません^ abc abc
$一致文字列の末尾Position、どの文字とも一致しませんabc $ abc
|部分式または関係一致abc | def def
(…)一致グループ(abc){2} abcabc
(?P <name>…)一致グループ、指定元の番号に加えて追加のエイリアス(?P <id> abc){2)abcabc
\ <number>は、参照番号<number>のグループを文字列(\ d)abc \ 1 1abc1
(?..)に一致させます。グループ化されていない(...)に一致し、その後に数量詞(?:abc){2} abcabc
(?iLmsux)iLmsuxの各文字は、文字列の先頭でのみ使用できる一致パターンを表し、複数( ?i)abc AbCを選択できます
(?#…)#の後のコンテンツはコメントアウトされますa(?#test)bc abc
(?(id / name)yes-pattern | no-pattern)グループをidまたはエイリアス名と一致させるには、yes-patternと一致させる必要があります。それ以外の場合は、三項演算子(\ d)と同様にno-patternと一致させる必要があります。 )abc(?(1)\ d | abc)1abc2
上記のルールは文字列照合のみを対象としています。実際のアプリケーションでは、複数の単一照合を組み合わせたものになるため、Pythonを上手に使用できるように習得することをお勧めします。最初に。ただし、これらのルールを直接覚えるのはつまらないので、それらをマスターするためにPythonのreモジュールと組み合わせて説明します。

Reモジュールアプリケーション
1.バージョンの表示
Pythonはバージョン1.5以降にreモジュールを追加し、Perlスタイルの正規表現パターンを提供しています。
reモジュールはPythonに埋め込まれているため、直接インポートできます。メソッド__version__を使用してバージョンを表示し、メソッド__all__を使用して属性を表示します。

インポート再
プリント(再.__ version__)
プリント(再.__ all__)#この
出力結果は、次のようにしている:
2.2.1
[ 'マッチ'、 'fullmatch'、 '検索'、 'サブ'、 'SUBN'、 '分割'、 'findall'、 'finditer'、 'compile'、 'purge'、 'template'、 'escape'、 'error'、 'Pattern'、 'Match'、 'A'、 'I'、 'L'、 'M '、' S '、' X '、' U '、' ASCII '、' IGNORECASE '、' LOCALE '、' MULTILINE '、' DOTALL '、' VERBOSE '、' UNICODE ']

上記のコードは、reモジュールが関数を含まない関数はたくさんあります。1つはテキスト内のパターンを見つけること、もう1つは式をコンパイルすること、3つ目は複数のレイヤーを照合することです。同時に、いくつかの定数が定義されます。

次に、検索()検索を
使用してテキスト内のパターン検索するには、主に検索()関数を使用します。この関数には、パターン、文字列、フラグの3つのパラメーターがあります。

patternは、コンパイル中に使用される式の文字
列を表します
。stringは、照合に使用される文字列を表します。flagsは、大文字と小文字を区別する、複数行の照合など、正規表現の照合方法を変更するために使用されるコンパイルフラグを表します。デフォルト値は0です。
一般的に使用されるフラグ値は次のとおりです:
フラグ意味
re.S(DOTALL)は「。」を
改行を含むすべての文字に一致させますre.I(IGNORECASE)は一致を大文字と小文字を区別しないようにし
ますre.L(LOCALE)はローカライズされた認識を行いますマッチングと
re.M(MULTILINE)は複数の行に一致し、影響^ $
re.X(VERBOSE)は、正規表現を理解しやすくするためのより柔軟な形式を介して
re.U解析文字Unicode文字セット、影響\ w、\ W、 \ b。\ B
re.serach()関数は、パターンとスキャンされたテキストを入力として受け取り、一致するオブジェクトを返します。一致するパターンが見つからない場合は、Noneを返します。

上記から、一致は返される一致オブジェクトであり、一致の性質に関する情報が含まれていることがわかります。正規表現を使用する場合、元の文字列でパターンが表示される位置には、start()、end()、group()、span()、groups()などのメソッドがあります。

start()は一致の開始位置を
返しますend()は一致の終了位置を
返しますgroup()は一致した文字列を返します
span()は一致
位置を含むタプル返します(start、end)groups()はリストを返しますこれには、すべての正規表現が含まれます。1から含まれるグループ番号までのグループ文字列のタプル。通常はパラメーターは含まれません。さらに、グループ番号(n、m)と一致する文字列を返すgroup(n、m)メソッドがあります。


3. Compile()の事前コンパイル
関数compile()を使用して正規表現を正規表現オブジェクトにコンパイルし、実行効率を向上させます。この関数は、2つのパラメーターpatternとflags = 0を持つオブジェクトパターンを返します。意味は、上記のsearch()で説明したものと同じです。

通常、コンパイルされた式はプログラムで頻繁に使用される式であるため、コンパイルはより効率的になりますが、ある程度のキャッシュも必要になります。コンパイルされた式を使用するもう1つの利点は、プログラムがユーザーのアクションに応答するときではなく、モジュールがロードされるときにすべての式がコンパイルされることです。

第4に、match()開始位置照合
関数match()を使用して、テキスト文字列の先頭で照合します。このメソッドは完全一致ではありません。文字列の開始位置/先頭のみを照合します。そこにあるかどうかは関係ありません。以下は一致する可能性がありますが、その後の文字列ですが、すべて無視されます。


5、findall()およびfinditer()トラバーサルマッチング
関数findall()を使用して、マッチングをトラバースし、文字列内の一致したすべての文字列を取得して、リストを返します。この関数の関数とパラメーターはsearch()関数と同じですが、一致する部分文字列と重複しない部分文字列をすべて返します。

関数finditer()は、リストの代わりにイテレータを返すことを除いて、findall()と同じ方法で使用されます。一致インスタンスを生成します。


(インタースティシャルアンチクライミング情報)Blogger CSDNアドレス:https://wzlodq.blog.csdn.net/

6. Split()Split
関数split()は、一致する部分文字列で一致する文字列を分割し、リストを返すことができます。

7. Sub()およびsubn()の置換
関数subは、patternを使用して、文字列内の一致する各部分文字列を置換し、置換された部分文字列をre.sub(pattern、repl、string、count、flag)の形式で返します。関数subn()は、これに基づいてもう1回の置換時間を返します。

patternは式です
stringrepelは置換された文字です
stringはマッチングに使用される文字列
countは置換の最大数であり、超えた後は
フラグは置換されません。上記と同じ


一般的に使用される正規表現
数値
式の検証は、主にテキストに表示される数値の正規表現の検証を照合するためのものです。以下では、いくつかの一般的に使用される式について説明し、reモジュールを使用してそれらを処理およびデモンストレーションします。

上記の^ [0-9] * $
および^は、一致する文字列の開始位置です。$は、一致する文字の終了位置です。[0-9]は、任意の数値を表します。*は、前の文字に0回または数え切れないほど一致します。 。以下は繰り返されませんので、よくわからない場合は上記をご参照ください。
要約すると、この式は数値を照合するために使用されます。


^ [1-9] \ d * $はゼロ以外の正の整数に一致します


^ \ d {n} $はn桁に一致します


^ \ d {n、} $は少なくともn桁に一致します


^ \ d {m、n} $はmからnまでの数字に一致します


^ [1-9] [0-9] *。[0-9] {1,2}?$は、0で始まらない小数点以下2桁までの数値に一致します


文字
テキスト分析では、漢字の抽出や文字の長さの削除など、文字表現の処理が必要になることがよくあります。

[\ u4e00- \ u9fa5]漢字マッチング


^ [A-Za-z0-9] + $英語と数字が一致


^ [\ u4E00- \ u9FA5AA-Za-z0-9] + $中国語と英語の数字が一致する


その他
^ \ w +(-+。\ w)* @ \ w +([-。] \ w +)* \。\ w +([-。] \ w +)* $ Eメールアドレスの確認


^ 1 [34589] \\ d {9} $携帯電話番号


^ [1-9] \ d {5}(18 | 19 |([23] \ d))\ d {2}((0 [1-9])|(10 | 11 | 12))(([ 0-2] [1-9])| 10 | 20 | 30 | 31)\ d {3} [0-9Xx] $ ID番号


^ [1-9] \ d {5}(?!\ d)$郵便番号


(?i)^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$域名


まとめ
正規表現reモジュール最も重要な機能は、フィルタリング、ターゲットからの必要なデータのフィルタリング、そして関数の組み合わせなどによる文字列からの特性データのフィルタリングです。これは、後続のPythonクローラーが解析するための基礎となります。データ。

おすすめ

転載: blog.csdn.net/qq_26280383/article/details/114367775