Python-正規表現
前のページ次のページ
正規表現 パターンに保持された特殊な構文を使用して、他の文字列または文字列のセットを照合または検索するのに役立つ特別な文字列です。正規表現は UNIX の世界で広く使用されています。
Python モジュール re Python で Perl のような正規表現を完全にサポートします。 re モジュールは、コンパイル中または正規表現の使用中にエラーが発生した場合、例外 re.error を発生させます。
正規表現を処理するために使用される 2 つの重要な関数について説明します。しかし、最初にちょっとしたことを:さまざまな文字があり、それらが正規表現で使用されると特別な意味を持ちます。正規表現を扱う際の混乱を避けるために、Raw Strings を r'expression' として使用します。 .
試合 機能
この関数は、RE パターン の一致を試みます 文字列へ オプションのフラグ付き .
この関数の構文は次のとおりです-
re.match(pattern, string, flags=0)
パラメータの説明は次のとおりです-
Sr.No. | パラメータと説明 |
---|---|
1 | パターン 照合する正規表現です。 |
2 | 文字列 これは、文字列の先頭にあるパターンと一致するように検索される文字列です。 |
3 | フラグ ビットごとの OR (|) を使用して、さまざまなフラグを指定できます。これらは修飾子で、以下の表にリストされています。 |
再戦 関数は一致を返します 成功時のオブジェクト、なし 失敗したとき。 group(num) を使用します または groups() 一致の機能 一致する式を取得するオブジェクト。
Sr.No. | Match Object メソッドと説明 |
---|---|
1 | グループ(num=0) このメソッドは一致全体 (または特定のサブグループ番号) を返します |
2 | グループ() このメソッドは、一致するすべてのサブグループをタプルで返します (存在しない場合は空です) |
例
ライブデモ#!/usr/bin/python import re line = "Cats are smarter than dogs" matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I) if matchObj: print "matchObj.group() : ", matchObj.group() print "matchObj.group(1) : ", matchObj.group(1) print "matchObj.group(2) : ", matchObj.group(2) else: print "No match!!"
上記のコードを実行すると、次の結果が生成されます-
matchObj.group() : Cats are smarter than dogs matchObj.group(1) : Cats matchObj.group(2) : smarter
検索 機能
この関数は、RE pattern の最初の出現を検索します 文字列内 オプションのフラグ付き .
この関数の構文は次のとおりです-
re.search(pattern, string, flags=0)
パラメータの説明は次のとおりです-
Sr.No. | パラメータと説明 |
---|---|
1 | パターン 照合する正規表現です。 |
2 | 文字列 これは、文字列内の任意の場所のパターンに一致するように検索される文字列です。 |
3 | フラグ ビットごとの OR (|) を使用して、さまざまなフラグを指定できます。これらは修飾子で、以下の表にリストされています。 |
再検索 関数は一致を返します 成功時のオブジェクト、なし 失敗したとき。 group(num) を使用します または groups() 一致の機能 一致する式を取得するオブジェクト。
Sr.No. | Match オブジェクトのメソッドと説明 |
---|---|
1 | グループ(num=0) このメソッドは一致全体 (または特定のサブグループ番号) を返します |
2 | グループ() このメソッドは、一致するすべてのサブグループをタプルで返します (存在しない場合は空です) |
例
ライブデモ#!/usr/bin/python import re line = "Cats are smarter than dogs"; searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I) if searchObj: print "searchObj.group() : ", searchObj.group() print "searchObj.group(1) : ", searchObj.group(1) print "searchObj.group(2) : ", searchObj.group(2) else: print "Nothing found!!"
上記のコードを実行すると、次の結果が生成されます-
searchObj.group() : Cats are smarter than dogs searchObj.group(1) : Cats searchObj.group(2) : smarter
マッチングと検索
Python には、正規表現に基づく 2 つの異なるプリミティブ操作があります:match 検索しながら、文字列の先頭でのみ一致をチェックします 文字列のどこかで一致をチェックします (これは Perl がデフォルトで行うことです)。
例
ライブデモ#!/usr/bin/python import re line = "Cats are smarter than dogs"; matchObj = re.match( r'dogs', line, re.M|re.I) if matchObj: print "match --> matchObj.group() : ", matchObj.group() else: print "No match!!" searchObj = re.search( r'dogs', line, re.M|re.I) if searchObj: print "search --> searchObj.group() : ", searchObj.group() else: print "Nothing found!!"
上記のコードが実行されると、次の結果が生成されます-
No match!! search --> searchObj.group() : dogs
検索と置換
最も重要なreの 1 つ 正規表現を使用するメソッドは sub です .
構文
re.sub(pattern, repl, string, max=0)
このメソッドは、RE パターン のすべての出現を置き換えます 文字列で replで 、最大でない限り、すべての出現を置き換えます 提供された。このメソッドは、変更された文字列を返します。
例
ライブデモ#!/usr/bin/python import re phone = "2004-959-559 # This is Phone Number" # Delete Python-style comments num = re.sub(r'#.*$', "", phone) print "Phone Num : ", num # Remove anything other than digits num = re.sub(r'\D', "", phone) print "Phone Num : ", num
上記のコードが実行されると、次の結果が生成されます-
Phone Num : 2004-959-559 Phone Num : 2004959559
正規表現修飾子:オプション フラグ
正規表現リテラルには、マッチングのさまざまな側面を制御するオプションの修飾子を含めることができます。修飾子は、オプションのフラグとして指定されます。前に示したように、排他的 OR (|) を使用して複数の修飾子を指定でき、これらのいずれかで表すことができます −
Sr.No. | 修飾子と説明 |
---|---|
1 | re.I 大文字と小文字を区別しない一致を実行します。 |
2 | re.L 現在のロケールに従って単語を解釈します。この解釈は、アルファベット グループ (\w および \W) と単語境界の動作 (\b および \B) に影響します。 |
3 | re.M $ を行末 (文字列の末尾だけでなく) に一致させ、^ を行頭 (文字列の先頭だけでなく) に一致させます。 |
4 | re.S ピリオド (ドット) を、改行を含む任意の文字に一致させます。 |
5 | re.U Unicode 文字セットに従って文字を解釈します。このフラグは、\w、\W、\b、\B の動作に影響します。 |
6 | re.X 「よりかわいい」正規表現構文を許可します。空白は無視され (set [] 内またはバックスラッシュでエスケープされている場合を除く)、エスケープされていない # はコメント マーカーとして扱われます。 |
正規表現パターン
制御文字 (+ ? . * ^ $ ( ) [ ] { } | \) を除く 、すべての文字が自分自身に一致します。制御文字の前にバックスラッシュを付けることで、制御文字をエスケープできます。
次の表は、Python で使用できる正規表現の構文を示しています −
Sr.No. | パターンと説明 |
---|---|
1 | ^ 行の先頭に一致します。 |
2 | $ 行末に一致します。 |
3 | . 改行を除く任意の 1 文字に一致します。 m オプションを使用すると、改行にも一致します。 |
4 | [...] 括弧内の任意の 1 文字に一致します。 |
5 | [^...] 角かっこで囲まれていない任意の 1 文字に一致します |
6 | re* 前の式の 0 回以上の出現に一致します。 |
7 | 再+ 前の式の 1 回以上の出現に一致します。 |
8 | レ? 前の式の 0 回または 1 回の出現に一致します。 |
9 | re{n} 直前の式の n 回の出現に一致します。 |
10 | re{ n,} 前の式の n 回以上の出現に一致します。 |
11 | re{ n, m} 直前の式の少なくとも n 回、最大で m 回の出現に一致します。 |
12 | a| b a または b のいずれかと一致します。 |
13 | (再) 正規表現をグループ化し、一致したテキストを記憶します。 |
14 | (?imx) 正規表現内の i、m、または x オプションを一時的に切り替えます。括弧内の場合、その領域のみが影響を受けます。 |
15 | (?-imx) 正規表現内の i、m、または x オプションを一時的にオフに切り替えます。括弧内の場合、その領域のみが影響を受けます。 |
16 | (?:re) 一致したテキストを記憶せずに正規表現をグループ化します。 |
17 | (?imx:re) 括弧内の i、m、または x オプションを一時的に切り替えます。 |
18 | (?-imx:re) 括弧内の i、m、または x オプションを一時的にオフに切り替えます。 |
19 | (?#...) コメント。 |
20 | (?=re) パターンを使用して位置を指定します。範囲がありません。 |
21 | (?! re) パターン否定を使用して位置を指定します。範囲がありません。 |
22 | (?>再) バックトラックなしで独立したパターンに一致します。 |
23 | \w 単語の文字に一致します。 |
24 | \W 単語以外の文字に一致します。 |
25 | \s 空白に一致します。 [\t\n\r\f] と同等。 |
26 | \S 非空白に一致します。 |
27 | \d 数字に一致します。 [0-9] に相当。 |
28 | \D 数字以外に一致します。 |
29 | \A 文字列の先頭に一致します。 |
30 | \Z 文字列の末尾に一致します。改行が存在する場合、改行の直前に一致します。 |
31 | \z 文字列の末尾に一致します。 |
32 | \G 前回のマッチが終了したマッチ ポイント。 |
33 | \b 角かっこの外側にある単語の境界に一致します。括弧内のバックスペース (0x08) に一致します。 |
34 | \B 非単語境界に一致します。 |
35 | \n、\t など 改行、キャリッジ リターン、タブなどに一致します。 |
36 | \1...\9 n 番目にグループ化された部分式に一致します。 |
37 | \10 すでに一致している場合、n 番目にグループ化された部分式に一致します。それ以外の場合は、文字コードの 8 進表現を参照します。 |
正規表現の例
リテラル文字
Sr.No. | 例と説明 |
---|---|
1 | パイソン 「python」に一致します。 |
文字クラス
Sr.No. | 例と説明 |
---|---|
1 | [Pp]ython 「Python」または「python」に一致 |
2 | こする "ruby" または "rube" に一致 |
3 | [aeiou] 小文字の母音のいずれか 1 つに一致 |
4 | [0-9] 任意の数字に一致します。 [0123456789]と同じ |
5 | [a-z] 任意の小文字の ASCII 文字に一致 |
6 | [A-Z] 大文字の ASCII 文字に一致 |
7 | [a-zA-Z0-9] 上記のいずれかに一致 |
8 | [^aeiou] 小文字の母音以外に一致 |
9 | [^0-9] 数字以外にマッチ |
特殊文字クラス
Sr.No. | 例と説明 |
---|---|
1 | . 改行以外の任意の文字に一致 |
2 | \d 数字に一致:[0-9] |
3 | \D 非数字に一致:[^0-9] |
4 | \s 空白文字に一致:[ \t\r\n\f] |
5 | \S 非空白に一致:[^ \t\t\r\n\f] |
6 | \w 単一の単語文字に一致:[A-Za-z0-9_] |
7 | \W 単語以外の文字に一致:[^A-Za-z0-9_] |
繰り返しのケース
Sr.No. | 例と説明 |
---|---|
1 | ルビー? 「rub」または「ruby」に一致:y はオプションです |
2 | ルビー* "rub" に 0 個以上の ys を加えたものに一致 |
3 | ルビー+ "rub" に 1 つ以上の ys を加えたものに一致 |
4 | \d{3} 正確に 3 桁に一致 |
5 | \d{3,} 3桁以上一致 |
6 | \d{3,5} 3、4、または 5 桁に一致 |
貪欲でない繰り返し
これは繰り返しの最小数に一致します −
Sr.No. | 例と説明 |
---|---|
1 | <.*>
貪欲な繰り返し:" |
2 | <.*?>
貪欲でない:" |
括弧によるグループ化
Sr.No. | 例と説明 |
---|---|
1 | \D\d+ グループなし:+ 繰り返し \d |
2 | (\D\d)+ グループ化:+ \D\d ペアを繰り返す |
3 | ([Pp]ython(, )?)+ "Python"、"Python、python、python" などに一致します。 |
後方参照
これは、以前に一致したグループに再度一致します −
Sr.No. | 例と説明 |
---|---|
1 | ([Pp])ython&\1ails python&Pails または Python&Pails に一致 |
2 | (['"])[^\1]*\1 一重引用符または二重引用符で囲まれた文字列。 \1 は、最初のグループが一致したものと一致します。 \2 は、2 番目のグループが一致したものと一致します。 |
代替
Sr.No. | 例と説明 |
---|---|
1 | python|perl 「python」または「perl」に一致 |
2 | こする(y|le)) 「ruby」または「ruble」に一致 |
3 | Python(!+|\?) 「Python」の後に 1 つ以上の ! |
アンカー
これは一致位置を指定する必要があります。
Sr.No. | 例と説明 |
---|---|
1 | ^パイソン 文字列または内部行の先頭にある「Python」に一致 |
2 | パイソン$ 文字列または行の末尾にある「Python」に一致 |
3 | \APython 文字列の先頭にある "Python" に一致 |
4 | パイソン\Z 文字列の末尾の「Python」に一致 |
5 | \bPython\b 単語境界で「Python」に一致 |
6 | \brub\B \B は非単語境界です:"rube" と "ruby" の "ruby" に一致しますが、単独では一致しません |
7 | パイソン(?=!) 感嘆符が続く場合は、「Python」に一致します。 |
8 | パイソン(?!!) 感嘆符が続かない場合は、"Python" と一致します。 |
括弧付きの特別な構文
Sr.No. | 例と説明 |
---|---|
1 | R(?#コメント) 「R」に一致します。残りはすべてコメントです |
2 | R(?i)uby 「uby」に一致する際に大文字と小文字を区別しない |
3 | R(?i:uby) 同上 |
4 | こする(?:y|le)) \1 後方参照を作成せずにグループ化のみ |
Python