Python3-python-reg-expressions

提供:Dev Guides
移動先:案内検索

Python 3-正規表現

_正規表現_は、パターンに保持されている特殊な構文を使用して、他の文字列または文字列のセットを一致または検索するのに役立つ特殊な文字シーケンスです。 正規表現は、UNIXの世界で広く使用されています。

モジュール re は、PythonでのPerlのような正規表現を完全にサポートします。 正規表現のコンパイル中または使用中にエラーが発生した場合、 re モジュールは例外 re.error を発生させます。

正規表現の処理に使用される2つの重要な関数について説明します。 それにもかかわらず、最初に小さなこと:さまざまな文字があり、正規表現で使用されると特別な意味を持ちます。 正規表現を扱う際の混乱を避けるために、Raw文字列を* r’expression '*として使用します。

単一の文字に一致する基本パターン

Sr.No. Expression & Matches
1

a, X, 9, <

通常の文字は、正確に一致します。

2
  1. (期間) *

改行「\ n」を除く任意の1文字と一致します

3
  • \w*

「単語」文字に一致します:文字または数字またはアンダーバー[a-zA-Z0-9_]。

4

\W

単語以外の文字に一致します。

5

\b

単語と非単語の境界

6

\s

単一の空白文字に一致します-スペース、改行、リターン、タブ

7

\S

空白以外の文字に一致します。

8

\t, \n, \r

タブ、改行、リターン

9

\d

10進数[0-9]

10

^

文字列の先頭に一致します

11

DOLLAR

文字列の末尾に一致

12

\

キャラクターの「特殊性」を抑制します。

コンパイルフラグ

コンパイルフラグを使用すると、正規表現の動作方法のいくつかの側面を変更できます。 reモジュールでは、フラグを IGNORECASE などの長い名前とIなどの短い1文字の形式の2つの名前で使用できます。

Sr.No. Flag & Meaning
1

ASCII, A

\ w、\ b、\ s、および\ dなどのエスケープを、それぞれのプロパティを持つASCII文字でのみ一致させます。

2

DOTALL, S

改行を含む任意の文字を作成、一致

3

IGNORECASE, I

大文字と小文字を区別しない一致を行う

4

LOCALE, L

ロケール対応の一致を行う

5

MULTILINE, M

複数行一致、^および&dollar;に影響

6

VERBOSE, X (for ‘extended’)

詳細なREを有効にします。これは、よりきれいに理解できるように編成できます

マッチ機能

この関数は、オプションの_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/python3
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

検索機能

この関数は、オプションの_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 Method & Description
1

group(num = 0)

このメソッドは、完全一致(または特定のサブグループnum)を返します

2

groups()

このメソッドは、一致するすべてのサブグループをタプルで返します(ない場合は空になります)

#!/usr/bin/python3
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!!")

上記のコードが実行されると、次の結果が生成されます-

matchObj.group() :  Cats are smarter than dogs
matchObj.group(1) :  Cats
matchObj.group(2) :  smarter

マッチングと検索

Pythonは、正規表現に基づいた2つの異なるプリミティブ操作を提供します。

#!/usr/bin/python3
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 --> matchObj.group() :  dogs

検索と置換

正規表現を使用する最も重要な re メソッドの1つは sub です。

構文

re.sub(pattern, repl, string, max=0)

このメソッドは、_string_のRE _pattern_のすべての出現を_repl_に置き換え、_max_が指定されていない限り、すべての出現を置き換えます。 このメソッドは変更された文字列を返します。

#!/usr/bin/python3
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

&dollar;を作成します(文字列の最後だけでなく)行の最後に一致し、^(文字列の最初だけでなく)任意の行の先頭に一致させます。

4

re.S

改行を含む任意の文字にピリオド(ドット)を一致させます。

5

re.U

Unicode文字セットに従って文字を解釈します。 このフラグは、\ w、\ W、\ b、\ Bの動作に影響します。

6

re.X

「キューター」正規表現構文を許可します。 空白を無視し(セット[]内またはバックスラッシュでエスケープされた場合を除く)、エスケープされていない#をコメントマーカーとして扱います。

正規表現パターン

制御文字を除いて、(&plus;? 。 * ^&dollar; ()[] \ {} | \)、すべての文字が一致します。 制御文字の前にバックスラッシュを付けることにより、制御文字をエスケープできます。

次の表は、Pythonで利用可能な正規表現の構文を示しています-

____これは、Pythonの正規表現構文のリストです。

Sr.No. Parameter & Description
1

^

行頭に一致します。

2

DOLLAR

行末に一致します。

3

.

改行を除く任意の1文字に一致します。 mオプションを使用すると、改行も一致させることができます。

4

[…​]

大括弧内の任意の1文字に一致します。

5

[^…​]

括弧内にない任意の1文字と一致します

6

re*

前の表現の0回以上の出現に一致します。

7

rePLUS

先行表現の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

rubyPLUS

「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\dPLUS

グループなし:&plus; \ dを繰り返します

2

(\D\d)PLUS

グループ化:&plus; \ D \ dのペアを繰り返します

3

([Pp]ython(,)?)PLUS

「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(!PLUS

アンカー

これには、一致位置を指定する必要があります。

Sr.No. Example & Description
1

^Python

文字列または内部行の先頭で「Python」に一致

2

PythonDOLLAR

文字列または行の末尾で「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