Python-reg-expressions
Python-正規表現
_正規表現_は、パターンに保持されている特殊な構文を使用して、他の文字列または文字列のセットを一致または検索するのに役立つ特殊な文字シーケンスです。 正規表現は、UNIXの世界で広く使用されています。
Pythonモジュール re は、PythonでのPerlのような正規表現を完全にサポートします。 reモジュールは、正規表現のコンパイル中または使用中にエラーが発生した場合、例外re.errorを発生させます。
正規表現の処理に使用される2つの重要な関数について説明します。 しかし、最初に小さなこと:さまざまな文字があり、正規表現で使用されると特別な意味を持ちます。 正規表現を扱う際の混乱を避けるために、Raw文字列を* r’expression '*として使用します。
_match_関数
この関数は、オプションの_flags_を使用して、RE _pattern_を_string_に一致させようとします。
この関数の構文は次のとおりです-
re.match(pattern, string, flags=0)
ここにパラメータの説明があります-
Sr.No. | Parameter & Description |
---|---|
1 |
pattern これは一致する正規表現です。 |
2 |
string これはストリングであり、ストリングの先頭のパターンに一致するように検索されます。 |
3 |
flags ビットごとのOR( |
_re.match_関数は、成功すると match オブジェクト、失敗すると None を返します。 match オブジェクトのgroup(num)または_groups()_関数を使用して、一致した式を取得します。
Sr.No. | Match Object Method & Description |
---|---|
1 |
group(num=0) このメソッドは、完全一致(または特定のサブグループnum)を返します |
2 |
groups() このメソッドは、一致するすべてのサブグループをタプルで返します(ない場合は空になります) |
例
#!/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
_search_関数
この関数は、オプションの_flags_を使用して、_string_内で最初にRE _pattern_が出現する場所を検索します。
この関数の構文は次のとおりです-
re.search(pattern, string, flags=0)
ここにパラメータの説明があります-
Sr.No. | Parameter & Description |
---|---|
1 |
pattern これは一致する正規表現です。 |
2 |
string これは文字列であり、文字列内の任意のパターンに一致するように検索されます。 |
3 |
flags ビットごとのOR( |
_re.search_関数は、成功すると match オブジェクトを返し、失敗すると none を返します。 match オブジェクトの_group(num)_または_groups()_関数を使用して、一致した式を取得します。
Sr.No. | Match Object Methods & Description |
---|---|
1 |
group(num=0) このメソッドは、完全一致(または特定のサブグループnum)を返します |
2 |
groups() このメソッドは、一致するすべてのサブグループをタプルで返します(ない場合は空になります) |
例
#!/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つの異なるプリミティブ操作を提供します。
例
#!/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)
このメソッドは、_string_内のRE _pattern_のすべての出現を_repl_に置き換え、_max_が指定されていない限り、すべての出現を置き換えます。 このメソッドは変更された文字列を返します。
例
#!/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. | Modifier & Description |
---|---|
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 「キューター」正規表現構文を許可します。 空白を無視し(セット[]内またはバックスラッシュでエスケープされた場合を除く)、エスケープされていない#をコメントマーカーとして扱います。 |
正規表現パターン
制御文字を除き、(+? 。 * ^ $()[] \ {} | \)、すべての文字が一致します。 制御文字の前にバックスラッシュを付けることにより、制御文字をエスケープできます。
次の表は、Pythonで使用できる正規表現の構文を示しています-
Sr.No. | Pattern & Description |
---|---|
1 |
^ 行頭に一致します。 |
2 |
$ 行末に一致します。 |
3 |
. 改行を除く任意の1文字に一致します。 mオプションを使用すると、改行も一致させることができます。 |
4 |
[…] 大括弧内の任意の1文字に一致します。 |
5 |
[^…] 括弧内にない任意の1文字と一致します |
6 |
re* 前の表現の0回以上の出現に一致します。 |
7 |
re+ 先行表現の1回以上の出現に一致します。 |
8 |
re? 前の表現の0または1回の出現に一致します。 |
9 |
re\{ n} 直前の表現の正確にn個の出現に一致します。 |
10 |
re\{ n,} 前の表現のn回以上の出現に一致します。 |
11 |
re\{ n, m} 先行表現の少なくともn回、最大m回の出現に一致します。 |
12 | *a |
b* aまたはbのいずれかに一致します。 |
13 |
(re) 正規表現をグループ化し、一致したテキストを記憶します。 |
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 |
(?> re) バックトラックせずに独立したパターンに一致します。 |
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, etc. 改行、キャリッジリターン、タブなどに一致します。 |
36 |
\1…\9 n番目のグループ化された部分式に一致します。 |
37 |
正規表現の例
リテラル文字
Sr.No. | Example & Description |
---|---|
1 |
python 「python」に一致します。 |
キャラクタークラス
Sr.No. | Example & Description |
---|---|
1 |
[Pp]ython 「Python」または「python」に一致 |
2 |
rub[ye] 「ruby」または「rube」に一致 |
3 |
[aeiou] いずれかの小文字の母音に一致 |
4 |
[0-9] 任意の数字に一致。 [0123456789]と同じ |
5 |
[a-z] 小文字のASCII文字に一致 |
6 |
[A-Z] 大文字のASCII文字に一致 |
7 |
[a-zA-Z0-9] 上記のいずれかに一致 |
8 |
[^aeiou] 小文字の母音以外のものに一致する |
9 |
[^0-9] 数字以外のものに一致する |
特殊文字クラス
Sr.No. | Example & Description |
---|---|
1 |
. 改行を除く任意の文字に一致 |
2 |
\d 数字と一致:[0-9] |
3 |
\D 数字以外と一致:[^ 0-9] |
4 |
\s 空白文字に一致する:[\ t \ r \ n \ f] |
5 |
\S 空白以外に一致:[^ \ t \ r \ n \ f] |
6 |
\w 単一の単語文字に一致:[A-Za-z0-9_] |
7 |
\W 単語以外の文字に一致:[^ A-Za-z0-9_] |
繰り返しの場合
Sr.No. | Example & Description |
---|---|
1 |
ruby? 「rub」または「ruby」に一致:yはオプションです |
2 |
ruby* 「rub」と0以上のysに一致 |
3 |
ruby+ 「rub」と1つ以上のysに一致 |
4 |
\d{3} 正確に3桁に一致 |
5 |
\d\{3,} 3桁以上の数字に一致 |
6 |
\d\{3,5} 3、4、または5桁に一致 |
貪欲でない繰り返し
これは繰り返しの最小数に一致します-
Sr.No. | Example & Description |
---|---|
1 |
<.>* 貪欲な繰り返し:「<python> perl>」に一致 |
2 |
<.?>* 貪欲でない:「<python> perl>」の「<python>」に一致 |
かっこでグループ化する
Sr.No. | Example & Description |
---|---|
1 |
\D\d+ グループなし:+ \ dを繰り返す |
2 |
(\D\d)+ グループ化:+ \ D \ dペアを繰り返します |
3 |
([Pp]ython(, )?)+ 「Python」、「Python、python、python」などに一致します。 |
後方参照
これは以前に一致したグループに再び一致します-
Sr.No. | Example & Description |
---|---|
1 |
([Pp])ython&\1ails python&pailsまたはPython&Pailsに一致 |
2 |
(['"])[^\1]\1* 一重引用符または二重引用符で囲まれた文字列。 \ 1は、最初のグループが一致したものに一致します。 \ 2は、2番目のグループが一致したものに一致します。 |
代替案
Sr.No. | Example & Description |
---|---|
1 | *python |
perl* 「python」または「perl」に一致 |
2 |
*rub(y |
le))* 「ルビー」または「ルーブル」に一致 |
3 | *Python(!+ |
アンカー
これには、一致位置を指定する必要があります。
Sr.No. | Example & Description |
---|---|
1 |
^Python 文字列または内部行の先頭で「Python」に一致 |
2 |
Python$ 文字列または行の末尾で「Python」に一致 |
3 |
\APython 文字列の先頭で「Python」に一致 |
4 |
Python\Z 文字列の最後で「Python」に一致 |
5 |
\bPython\b 単語の境界で「Python」に一致 |
6 |
\brub\B \ Bは非単語境界です:「rube」および「ruby」の「rub」に一致しますが、単独ではありません |
7 |
Python(?=!) 感嘆符が続く場合は、「Python」に一致します。 |
8 |
Python(?!!) 感嘆符が続かない場合は、「Python」に一致します。 |
括弧付きの特別な構文
Sr.No. | Example & Description |
---|---|
1 |
R(?#comment) 「R」に一致します。 残りはすべてコメントです |
2 |
R(?i)uby 「uby」に一致している間は大文字と小文字を区別しません |
3 |
R(?i:uby) 同上 |
4 | *rub(?:y |