python_正規式学習

re.match()関数:

関数構文:re.mathch( pattern , string , flags =0)

パラメータの説明:

パターン 一致した正規表現
文字列 一致する文字列
フラグ 通常のマッチング方法を制御するために使用されるフラグ。ケースの感度、複数行のマッチングなど。

一致が成功した場合、re.matchメソッドは一致したオブジェクトを返します。それ以外の場合は、Noneを返します。

group(num)またはgroups()マッチングオブジェクト関数を使用して、マッチング式を取得できます

group(num) 式全体に一致する文字列。一度に複数のグループ番号を入力できます。この場合、それらのグループに対応する値を含むタプルが返されます
group() 1から含まれるグループ番号までのグループ文字列を含むタプルを返します

例:

>>> import re

>>> print(re.match('www','www.google.com').span())  #開始時に一致(0,3)>>>print(re.match('com','www.google.com'))#不開始時に一致

None

例:

>>> import re

>>> line ="Cats are smarter than dogs">>> # .*ニューライン以外の一致を示します(\n \r)以外の単一または複数の文字

>>> match0bj = re.match(r'(.*)are(.*?).*',line,re.M|re.I)>>>if match0bj:print('match0bj.group():',match0bj.group())print('match0bj.group(1):',match0bj.group(1))print('match0bj.group(2):',match0bj.group(2))>>>else:print('No match!!!')

 

match0bj.group(): Cats are smarter than dogs

match0bj.group(1): Cats

match0bj.group(2):

re.search()関数:文字列全体をスキャンして、最初に成功した一致を返します

関数構文:re.search( pattern , string , flags=0)

パラメータの説明:

パターン 一致した正規表現
文字列 一致する文字列
フラグ 通常のマッチング方法を制御するために使用されるフラグ。ケースの感度、複数行のマッチングなど。

一致が成功した場合、re.matchメソッドは一致したオブジェクトを返します。それ以外の場合は、Noneを返します。

group(num)またはgroups()マッチングオブジェクト関数を使用して、マッチング式を取得できます

group(num) 式全体に一致する文字列。一度に複数のグループ番号を入力できます。この場合、それらのグループに対応する値を含むタプルが返されます
group() 1から含まれるグループ番号までのグループ文字列を含むタプルを返します

例:

>>> import re

>>> print(re.search('www','www.google.com').span())#開始時に一致(0,3)>>>print(re.search('com','www.google.com'),span())#不開始時に一致(11,14)

re.matchとre.searchの違い:

re.matchは文字列の先頭のみに一致します。文字列が先頭の通常の式と一致しない場合、一致は失敗し、関数はNoneを返しますが、re.searchは一致が見つかるまで文字列全体を照合します。

>>> import re

>>> line ='Cats are smarter than dogs'>>> match0bj = re.match( r'dogs',line,re.M|re.I)>>>if match0bj:print("match --> match0bj.group():",match0bj.group())else:print("No match!!!")

 

No match!!!>>> match0bj = re.search(r'dogs',line,re.M|re.I)>>>if match0bj:print("match --> match0bj.group():",match0bj.group())else:print("No match!!!")

 

match --> match0bj.group(): dogs

re.sub()関数:(取得して置換)文字列内の一致を置換するために使用

構文:re.sub( pattern , rep1 , string , coun=0)

パラメータ:

パターン 通常のパターン文字列
repl 置き換えられた文字列も関数にすることができます
string 検索および置換される元の文字列
count パターンマッチング後の置換の最大数。デフォルトは0で、すべてのマッチを置換することを意味します

例:

>>> import re

>>> phone ='2004-959-559  #これは数字です'>>> #コメントを削除

>>> num = re.sub(r'#.*$',"",phone)>>>print("電話番号:",num)

電話番号:2004-959-559>>> #非デジタルコンテンツを削除する

>>> num = re.sub(r'-',"",phone)>>>print("電話番号:",num)

電話番号:2004959559#これは数字です

 

replパラメーターは関数です:

>>> import re

>>> # 一致した数に2を掛けます>>> def double(matched):

value =int(matched.group('value'))returnstr(value *2)>>> s ='A23G4HFD567'>>>print(re.sub('(?P<value>\d+)',double,s))

A46G8HFD1134

re.compile()関数:

通常の式をコンパイルし、2つの関数match()とsearch()で使用するための通常の式(Pattern)オブジェクトを生成するために使用されます!

構文形式:re.compile( pattern [, flags ])

パラメータ:

pattem 文字列形式の正規表現
flags (オプション)は、大文字と小文字を区別しない、複数行モード、その他の特定のパラメーターなど、一致するモードを示します。大文字と小文字を区別しないre.Lは、特殊文字セット\ w、\ W、\ b、\ B、\ s、を示します。 \ Sは、現在の環境によって異なります。re.M複数行モードre.Sは「。」を意味します。また、新線文字を含むすべての文字(「。」は新線文字を含みません)re.Uは、特殊文字セット\ w、\ W、\を表します。 b、\ B、\ s、\ SはUnicode文字属性データベースre.Xに依存します読みやすさを向上させるために、「#」の後のスペースとコメントは無視されます
re.I ケースを無視
re.L は、特殊文字セット\ w、\ W、\ b、\ B、\ s、\ Sが現在の環境に依存することを意味します
re.M マルチラインモード
re.S は「。」および新行文字を含むすべての文字を意味します(「。」には新行文字は含まれません)
re.U は、特殊文字セット\ w、\ W、\ b、\ B、\ s、\ SがUnicode文字属性データベースに依存することを意味します
re.X 読みやすくするために、「#」の後のスペースとコメントは無視してください

例:

>>> import re

>>> pattern = re.compile(r'\d+')>>> m = pattern.match('one12twothree34four') #頭を見つける、一致しない

>>> print(m)

None

>>> m = pattern.match('one12twothree34four',2,10)  #eの位置から一致、一致なし

>>> print(m)

None

>>> m = pattern.match('one12twothree34four',3,10)#位置1から正確に一致します

>>> print(m)#Matchオブジェクトを返します

<_ sre.SRE_Match object; span=(3,5), match='12'>>>> m.group(0)#省略可能0'12'>>> m.start(0)#省略可能03>>> m.end(0)#省略可能05>>> m.span(0)#省略可能0(3,5)

この例では、一致が成功すると、Matchオブジェクトが返されます。ここで、

group([group1、...]) 1つ以上のグループ化された一致する文字列を取得するために使用されます。一致するサブ文字列全体を取得する場合は、group()またはgroup(0)を直接使用できます
start([group]) 文字列全体(サブ文字列の最初の文字のインデックス)で一致したサブ文字列の開始位置を取得するために使用されます。デフォルトは0です
end([group]) デフォルトでは、文字列全体(サブストリング+1の最後の文字のインデックス)でグループと一致するサブストリングの終了位置を取得します0
span([group]) return(start(group)、end(group))

例+続き

>>> import re

>>> pattern = re.compile(r'([a-z]+) ([a-z]+)',re.I)#re.私はケースを無視することを意味します

>>> m = pattern.match('hello world wide web')>>>print(m)#一致が成功しました。一致オブジェクトを返します

<_ sre.SRE_Match object; span=(0,11), match='hello world'>>>> m.group(0)#正常に一致する文字列全体を返します

' hello world'>>> m.span()#正常に一致するサブストリング全体のインデックスを返します(0,11)>>> m.group(1)#正常に一致した最初のサブストリングを返します

' hello'>>> m.span(1)#正常に一致した最初のサブストリングのインデックスを返します(0,5)>>> m.group(2)#正常に一致する2番目のサブストリングを返します

' world'>>> m.span(2)#正常に一致した2番目のサブストリングのインデックスを返します(6,11)>>> m.groups()#に相当(m.group(1),m.group(2),...)('hello','world')>>> m.group(3)#3番目のグループはありません-エラーが報告されます

Traceback(most recent call last):

 File "<pyshell#12>", line 1,in<module>

 m.group(3)

IndexError: no such group

findall()関数:

文字列内の正規式と一致するすべてのサブ文字列を検索し、リストを返します。一致するものが見つからない場合は、空のリストを返します。

注:一致と検索の一致は1回、findallはすべての一致です。

構文形式:findall( string[, pos[, endpos]])

パラメータ:

文字列 照合する文字列
pos オプションのパラメーター。文字列の開始位置を指定します(デフォルトは0)
endpos オプションのパラメーター。文字列の終了位置を指定します(文字列のデフォルトの全長)

例:

>>> import re

>>> pattern = re.compile(r'\d+') #番号を見つける

>>> result1 = pattern.findall('runoob 123 google 456')>>> result2 = pattern.findall('run88oob123google456',0,10)>>>print(result1)['123','456']>>>print(result2)['88','12']

re.finditer()関数:

-findallと同様に、文字列内の正規式と一致するすべてのサブ文字列を検索し、それらをイテレーターとして返します。

構文形式:re.finditer( pattern, string, flags=0)

パラメータ:

パターン 一致した正規表現
文字列 一致する文字列
フラグ フラグ

例:

>>> import re

>>> it = re.finditer(r'\d+','12a32bc43jf3')>>>for match in it:print(match.group())1232433

re.split()関数:

splitメソッドは、一致する可能性のあるサブ文字列に従って文字列を分割し、リストリストを返します。構文は次のとおりです。

  re.split( pattern, string[,maxsplit=0, flags=0])

パラメータ:

パターン 一致した正規表現
文字列 一致する文字列
maxsplit 分割時間、maxsplit = 1 >> 1回分割、デフォルトは0無制限時間
フラグ フラグ

例:

>>> import re

>>> re.split('\W+','runoob, runoob, runoob.')['runoob','runoob','runoob','']>>> re.split('(\W+)',' runoob, runoob, runoob.')['',' ','runoob',', ','runoob',', ','runoob','.','']>>> re.split('\W+',' runoob, runoob, runoob.',1)['','runoob, runoob, runoob.']>>> re.split('a*','hello world') #一致できない文字列の場合、splitは文字列を分割しません

[' hello world']

正規表現オブジェクト:

・re.compile()はRegexObjectオブジェクトを返します

·re.MatchObject

group()はREと一致する文字列を返します

-start():試合が始まる位置を返します

-end():試合が終了する位置を返します

-span():一致の位置(開始、終了)を含むタプルを返します

通常の式修飾子-オプションのフラグ:

通常の式には、マッチングモードを制御するためのオプションのフラグ修飾子を含めることができます。修飾子はオプションのフラグとして指定されます。複数のフラグはビット単位のOR(I)で指定できます。 (re.I | re.MはIおよびM記号に設定されているなど):

修飾子 機能
re.I 一致する大文字と小文字を区別しない(大文字と小文字を区別しない)
re.L ロケールを意識したマッチングを行う
re.M 複数行のマッチング、^と$
re.S newlineを含むすべての文字に一致させる
re.U Unicode文字セットに従って文字を分析します。このフラグは\ w、\ W、\ b、\ B
re.X このフラグは、より柔軟なフォーマットを提供するため、通常の式をより理解しやすく書くことができます

通常の表現パターン:

・パターン文字列は、特別な構文を使用して正規の式を表します。

・文字と数字はそれ自体を表します。通常の表現パターンの文字と数字は同じ文字列に一致します。

・ほとんどの文字と数字は、それらの前にバックスラッシュを追加すると、異なる意味を持ちます。

・パンクチュエーションマークは、エスケープされた場合にのみ一致します。それ以外の場合は、特別な意味があります。

・バックスラッシュ自体は、バックスラッシュでエスケープする必要があります。

・通常の式にはバックスラッシュが含まれているため、それらを表すには生の文字列を使用することをお勧めします。

・パターン要素:r '\ t'は、対応する特殊文字と一致する[\ t](https://www.cnblogs.com//t)と同等です。

・次の表に、再式パターン構文の特別な要素を示します。パターンの使用中にオプションのフラグパラメータを指定すると、一部のパターン要素の意味が変わります。

モード 機能
^ 文字列の先頭に一致
$ は、新線文字を除くすべての文字に一致します。DOTALLタグを指定すると、新線文字を含むすべての文字に一致できます
[...] 個別にリストされた文字のグループを表すために使用されます:[amk]は「a」、「m」、または「k」に一致します
[^...] []にない文字:[^ abc]は、a、b、c以外の文字と一致します
re * 0個以上の式に一致します
re + 1つ以上の式に一致します
re? 前の正規表現で定義された0または1フラグメントに一致、貪欲でない方法
re {n} n個の前の式に一致します(例:「o {2}」は「Bob」の「o」に一致できませんが、「food」の「o」には一致します)
re {n、} 前のn個の式と正確に一致します。たとえば、「o {2、}」は「Bob」の「o」と一致することはできませんが、「foooood」のすべてのoと一致することはできます。 「o {1、}」は「o +」と同等です。 「o {0、}」は「o *」と同等です。
re {n、m} 前の正規式で定義されたフラグメントをn回からm回一致させる、貪欲な方法
a b
( re) 括弧内の式に一致します。これはグループも意味します
(? imx) 通常の式には3つのオプションのフラグが含まれています:i、m、またはx-括弧内の領域にのみ影響します
(?- imx) 通常の式はi、m、またはxのオプションのフラグをオフにします
(?: re) (...)に似ていますが、グループを示していません
(? imx:re) 括弧内にi、m、xオプションフラグを使用
(?- imx:re) 括弧内にi、m、xオプションフラグを使用しないでください
(?#...) 注意事項
(?= re) フォワードポジティブデリミタ。含まれている正規式が...で表されている場合、現在の位置が正常に一致したときに成功し、そうでない場合は失敗します。しかし、含まれている式が試されると、マッチングエンジンはまったく改善されません。パターンの残りの部分は、区切り文字の右側を試す必要があります。
(?! re) フォワードネゲーションデリミタ。正の区切り文字とは異なり、含まれている式が文字列の現在の位置で一致しない場合に成功します。
(?> re) マッチングの独立したパターン。バックトラックの必要性を排除します。
\ w 一致する数字と文字の下線
\ W 数字以外の文字の下線に一致
\ s 任意の空白文字に一致します(\ t \ n \ r \ fと同等)
\ S 空でない文字に一致します
\ d 任意の数に一致([0-9]に相当)
\ D 数字以外に一致
\ A 一致する文字列の開始
\ Z 一致する文字列の終わり(新しい行がある場合は、新しい行の前の終了文字のみが一致します)
\ z 一致する文字列の終わり
\ G 最後の試合が完了した位置にマッチする
\ b は単語の境界、つまり単語とスペースの間の位置に一致します(たとえば、「er \ b」は「never」の「er」と一致できますが、「verb」の「er」とは一致しません
\ B 単語以外の境界に一致します(例:「er \ B」は「verb」の「er」に一致できますが、「never」の「er」には一致しません)
\ n \ tなど 新しい行の文字に一致する、タブの文字に一致するなど
\1...\9 n番目のグループの内容に一致する
\10 n番目のグループの内容が一致する場合は一致します。一致しない場合は、8文字の文字コードの式を参照します

正規表現の例:

文字マッチング:

[ Pp] ython 「Python」または「python」に一致
rub [ye] 「ruby」または「rube」に一致
[ aeiou] 括弧内の任意の文字に一致します
[0- 9] 任意の数に一致
[ az] 任意の小文字に一致
[ AZ] 任意の大文字に一致
[ a-zA-Z0-9] 任意の数字と文字に一致
[^ aeiou] aeiou文字を除くすべての文字
[^0- 9] 数字以外の文字に一致

特別なキャラクタークラス:

. 「\ n」以外の任意の1文字に一致し、「\ n」内の「[。\ n]」パターンに一致します
\ d 数字に一致
\ D 数字以外の文字と一致する
\ s 任意の空白文字に一致
\ S 空白以外の文字と一致します
\ w 下線を含むすべての単語文字に一致します
\ W 単語以外の文字と一致します

Recommended Posts

python_正規式学習
Python正規表現クイックラーニング
Pythonの正規表現学習の小さな例
Python正規式サンプルコード
Pythonエントリー学習教材
Four.mdを学習するPython3エントリ
Python関数の基礎学習
python_クローラーの基本的な学習
three.mdを学習するPython3エントリ
Python3.mdの使用を開始する
two.mdを学習するPython3エントリ
はじめにpython学習手順
Pythonマジック関数eval()学習
パイソンクローラー開発の学習パス
Python学習OSモジュールと使用法
Python正規表現の簡単な紹介
Pythonの基礎を学ぶ2日間
Pythonの正規式の最初の外観(6)