正規表現(またはRE)は、Pythonに埋め込まれ、reモジュールを介して実装される、非常に特殊な小さなプログラミング言語です。正規表現パターンは一連のバイトコードにコンパイルされ、Cで記述されたマッチングエンジンによって実行されます。
1.通常のキャラクター
第二に、メタキャラクター
1.メタキャラクター。^ $ * +?{}
1#レギュラーを導入:fuzzy matching 2 import re 3 4# 'を入力します。デフォルトは\ n(改行文字)を除くすべての文字に一致します。flags= re.DOTALLを指定すると、改行 5 res を含むすべての文字に一致します= re.findall( 'W..l'、 'Hello World !!')#['Worl'] 6 ret = re.findall( 'W..l'、 'Hello W \ nrld !!'、flags = re.DOTALL)#['W \ nrl'] 7 8# '^'は文字の先頭に一致します。flags= re.MULTILINEを指定すると、これも一致します(r "^ a"、 "\ nabc \ neee"、 flags = re.MULTILINE) 9 res = re.findall( '^ h ... o'、 'hjaookhello')#['hjaooh'] 10 ret = re.findall(r '^ a'、 '\ nabc \ neee '、flags = re.MULTILINE)#[' a '] 11 12#' $ 'flags = re.MULTILINEを指定すると、文字の末尾と一致し、これも一致します( "foo $"、 "bfoo \ nsdfsf"、 flags = re。MULTILINE) 13 res = re.findall( 'a..x $'、 'aaaalexauex')#['auex'] 14 ret = re.findall( 'foo $'、 'bfoo \ nsdfsf'、flags = re.MULTILINE )#['foo'] 15 16# '*'は*番号の前の文字と0回以上一致します 17 res = re.findall( "ab *"、 "cabb3abcbbac")#['abb'、 'ab'、 'a'] 18 19# '+'は前の文字と1回以上一致します 20 res = re。 findall( "ab +"、 "cabb3abcbbac")#['abb'、 'ab'] 21 22# '?'は前の文字に1回または0回一致します 23 res = re.findall( "ab?"、 "cabb3abcbbac" )#['ab'、 'ab'、 'a'] 24 25# '{m}'は前の文字にm回一致し、{m、n}は一致する時間の範囲を表します 26 res = re.findall( "a {1,3} b "、" caaabb3abcbbaabc ")#['aaab'、 'ab'、 'aab'] 27 res = re.findall(" a {1,3} b "、" aaaab ")#[' aaab '] 28 29 #結論:*は{0、+∞}と等しい、+は{0、+∞}と等しい、?は{0,1}と等しい、*、+ ,?が推奨されます
注:先行する「*」と「+」は貪欲な一致(できるだけ多くの一致)であり、その後に「?」が続くことで、それらは遅延一致(できるだけ少ない一致)になります。
1インポートre 2 res = re.findall( "ab +"、 "abbbbb")#['abbbbb'] 3 res = re.findall( "ab *"、 "abbbbb")#['abbbbb'] 4 res = re .findall( "ab +?"、 "abbbbb")#['ab'] 5 res = re.findall( "ab *?"、 "abbbbb")#['a']
2.メタ文字の文字セット[]
1#[] yesまたは 2の関係を表す複数の文字がありますres = re.findall( 'c [on] m'、 'comaxcnm')#['com'、 'cnm'] 3 res = re.findall( '[az]'、 'comaxcn')#['c'、 'o'、 'm'、 'a'、 'x'、 'c'、 'n'] 4 5#メタ文字は[]に配置されます、メタ文字(\、^、-exception)の特殊機能をキャンセルします 6 res = re.findall( '[w * +、$]'、 'co、ma + wc $ n *')#['、'、 ' + '、' w '、' $ '、' * '] 7 8#^ []を入れます。これは、逆数を意味します 9 res = re.findall(' [^ t] '、' atxmetu ')#[' a '、' x '、' m '、' e '、' u '] 10 res = re.findall(' [^ tx] '、' atxmetu ')#[' a '、' m '、' e ' 、 'u'] 11 12# - []に入れると、範囲13 res = re.findall( '[1-9a-z] '、' 13mawcCB ')#[' 1 '、' 3 '、' m '、' a '、' w '、' c '] 14 res = re.findall(' [1- 9a-zA-Z] '、' 13mawcCB ')#[' 1 '、' 3 '、' m '、' a '、' w '、' c '、' C '、' B '] 15 16#逆特殊機能のスラッシュの後に通常の文字が続く 17 res = re.findall( '[\ w \ d]'、 '13mawcCB')#['1'、 '3'、 'm'、 'a'、 'w'、 'c'、 'C'、 「B」]
3.メタキャラクターの翻訳キャラクター
1#\ dは[0-9]と同等の任意の10進数字と一致します 2#\ Dは[^ 0-9]と同等の非数値文字と 一致します3#\ s [\ t \ nと同等の空白文字と一致\ r \ f \ v] 4#\ Sは[^ \ t \ n \ r \ f \ v]と同等の空白以外の文字と 一致します5#\ wは[a-zA-Z0と同等の英数字と一致します-9] 6#\ Wは[^ a-zA-Z0-9]と同等の非英数字に一致します 7#\ bは特殊文字の境界に一致します 8 9# '\'バックスラッシュの後に通常の文字が続きます特殊機能 10 print(re.findall( '\ d {5}'、 'ae12345cw67890'))#['12345'、 '67890'] 11 print(re.findall( '\ sasd'、 'fak asd')) #['asd'] 12 print(re.findall( '\ w'、 'fak asd'))#['f'、 'a'、 'k'、 'a'、 's'、 'd'] 13 print(re.findall(r'I \ b '、' I am a LI $ T '))#[' I '、' I '] 14 15#バックスラッシュとそれに続くメタ文字削除の特殊関数 16 print(re.findall( 'a \。'、 'A.jk'))#['a。'] 17 print(re.findall( 'a \ + '、' a + jk '))#[' a + ']
次のようにバックスラッシュ「\」の一致を見てみましょう。
1#バックスラッシュに一致\ 2 print(re.findall( 'c \ l'、 'abc \ le'))#エラー 3を報告する(re.findall( 'c \\ l'、 'abc \ le')) #エラーを 報告4印刷(re.findall( 'c \\\\ l'、 'abc \ le'))#['c \\ l'] 5印刷(re.findall(r'c \\ l '、' abc \ le '))#[' c \\ l '] 6 7#\ bはASCIIテーブルで意味があるため、r 8 print(re.findall(' \ bblow '、' blowを追加します'))#[]、 9プリントと一致しない(re.findall(r' \ bblow '、' blow '))#[' blow ']
4.メタキャラクターのグループ化()
1#()のグループ化、角括弧内の文字全体 2 print(re.findall( '(as)'、 'jdkasas'))#['as'、 'as'] 3 4 res = re.search( ' (?P <id> \ d {3})/(?P <name> \ w {3}) '、' weeew34ttt123 / ooo ') 5 print(res.group())#123 / ooo 6 print(res .group( 'id'))#123 7 print(res.group( 'name'))#ooo 8 9#findall 10 res = re.findall( 'www。(\ w +)。com'、 'www.baidu .com ') 11 print(res)#[' baidu ']、グループのコンテンツのみを取り出すグループがあります 12 ret = re.findall(' www。(?:\ w +)。com '、' www.baidu.com ') 13 print(ret)#[' www.baidu.com ']、plus ?:グループ権限をキャンセル 14 15#検索 16 res = re.search(' www。(\ W +)。Com '、' www。 baidu.com ') 17 print(res.group())#www.baidu.com、findallとは異なる
5.メタキャラクターのパイプ文字|
1#|一致|左または|右の文字 2 print(re.findall( '(ab)| \ d'、 'rabhdg8sd'))#['ab'、 '') 3 print(re.search( '( ab)| \ d '、' rabhdg8sd ')。group())#ab
6. reモジュールでの一般的なメソッド
1#正規表現メソッド 2#re.findall()#すべての結果がリストに返される 3 #re.search()#最初に一致したオブジェクト(オブジェクト)を返す、オブジェクトはグループメソッドを呼び出して戻り結果を 受け取る4#re.match()#文字列の先頭でのみ一致し、オブジェクトのみを返します。オブジェクトは、グループメソッドを呼び出して戻り結果を取得できます 5#re.split()#一致した文字はリストの区切り文字として使用されます符 6#re.sub()#文字を 照合して置換7#re.subn()#効果はsubと同じですが、同時に置換回数を返します 8#re.compile()#一致するルールをオブジェクトにコンパイルします後で使用するために 9#re.finditer()#イテレータを返します 10 11#findall:すべての結果はリストに返されます 12 print(re.findall( '\ d'、 '12345')) #['1'、 '2'、 '3'、 '4'、 '5'] 13 14#検索:条件を満たす最初の結果に一致 15 res = re.search( 'sb'、 'adssbeeesb' ) 16 print(res)#<_sre.SRE_Match object; span =(3,5)、match = 'sb'> 17 print(res.group())#sb 18 19#一致:検索と同じですが、文字列の先頭で一致します 20 res = re.match( 'sb'、 'sbaee') 21 print(res)#<_sre.SRE_Match object; span =(0,2) 、match = 'sb'>、一致しない場合、Noneを返します 22 print(res.group())#sb 23 24#split:一致した文字はリストの区切りとして使用されます 25 res = re.split( 'k'、 ' djksal ') 26 print(res)#[' dj '、' sal '] 27 res = re.split(' [j、s] '、' dsejksal ') 28 print(res)#[' d '、' e '、' k '、' al '] 29 res = re.split(' [j、s] '、' sejksal ') 30 print(res)#[' '、' e '、' k '、' al ' ] 31 32#sub:文字を一致させて置換します 33 res = re.sub( 'a..x'、 's..b'、 'eealexbb') 34 print(res)#ees ..bbb 35 res = re.sub( 'ab'、 '123'、 'ablexbab'、1)#最後のパラメータは数回置換することです 36 print(res)#123lexbab 37 38#subn:効果はsubと同じで、返された結果と、それが置換された回数に加えて、タプルを返します 39 res = re.subn( 'a..x'、 's..b'、 'eealexbb ') 40 print(res)#(' ees..bbb '、1) 41 res = re.subn(' ab '、' 123 '、' ablexbab ')#最後のパラメータは、数回置き換えることです 42 print(res) #( '123lexb123'、2) 43 44#コンパイル:後で使用するために一致するルールをオブジェクトにコンパイルする 45 obj = re.compile( '\。Com')#一致するルールをオブジェクトにコンパイルする 46 res = obj .findall( 'fajs.comeee') 47 ret = obj.findall( 'aa.comss.com') 48 print(res)#['. com '] 49 print(ret)#['. com '、 '。 com '] 50 51#finditer:イテレータを返します 52 res = re.finditer(' \ d '、' 12345 ') 53 print(res)#<0x000001E98FE4D7B8>のcallable_iteratorオブジェクト 54 for i for res: 55 print(i.group()) 56#1 57#2 58#3 59#4 60#5