【Pythonで学ぶ】正規表現

正規表現(または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

おすすめ

転載: www.cnblogs.com/gtea/p/12715270.html