正規表現(Regular Exception)とそのメタ文字の関連使用--単一文字マッチング、境界マッチング、マルチ文字マッチング

10478 ワード

正規表現(Regular Exception)とそのメタ文字
一、正規表現(Regular Exception)
正規表現は、ある構文規則を記述するために文字列のシーケンスで形成された文字列であり、この構文規則に合致する一連の文字列検索モードに一致する.
正規表現は、すべてのテキスト検索とテキスト置換の操作に使用できます.pythonでは、reモジュールを内蔵することによって、プログラマが直接呼び出して正規マッチングを実現することができ、正規表現は一連のバイトコードにコンパイルされ、cで記述されたマッチングエンジンによって実行される.
二、正規表現のメタ文字
1、単一文字と数字を一致するメタ文字
.		#             
[0123456789] #[]     ,                  
[a-z]	 #        
[A-Z]	 #        
[0-9]	#      
[0-9a-zA-Z] #          
[0-9a-zA-Z_]#       ,       
[^good]		#    good            ,     ^     ,           
[^0-9]		#          
\d 			#    ,   [0-9]
\D		    #       ,   [^0-9]
\w			#    ,      ,   [0-9a-zA-Z_]
\W			#     ,      ,   [^0-9a-zA-Z_]
\s			#        (  、  、  、  、  ),   [\r
\t\f] \S # , [^\f
\r\t] '''

適用例:
#    re  
import re

'''re       ,        ,         :
re.findall(pattren,string)
pattren:     
string:       
  : string      ,             '''

string = "you are very good,\r
12 23 3you are very great!!!" print(re.findall(r"[you]",string)) # ['y', 'o', 'u', 'y', 'o', 'o', 'y', 'o', 'u', 'y'] print(re.findall(r".","very good,\r
12")) # ['g', 'o', 'o', 'd', ',', '\r', '1', '2'] print(re.findall(r"[0-9]",string)) # ['1', '2', '2', '3', '3']

2、境界一致文字
^	    ,  []  ^      
$	    
\A	       ,  ^    ,\A           ,   re.M             
\Z	       ,  $    ,\Z           ,   re.M            
\b	         ,            
	'er\b'    never,    nerve	
\B	       

適用例:
#    re  
import re

str1 = "you a very good
you a very good"
print(re.findall(r"^you",str1)) # ['you'] print(re.findall(r"good$",str1)) # ['good'] str2 = "good good" str3 = "good" print(re.findall(r"^good$",str2))# [] print(re.findall(r"^good$",str3))# ['good'], good print(re.findall(r"er\b","never erver")) print(re.findall(r"\ber","never erver")) print(re.findall(r"\ber\b","never er erver")) print(re.findall(r"er\B","never er erver")) print(re.findall(r"\Ber","never er erver")) ''' ['er', 'er'] ['er'] ['er'] ['er'] ['er', 'er'] ''' str1 = "you a very good
you a very good"
print(re.findall(r"^you",str1,flags=re.M))#re.M print(re.findall(r"\Ayou",str1,flags=re.M)) # #['you', 'you'] #['you']

3、多文字照合
#  :   x,y         ,n,m(    ),           
(xyz)	       xyz(         )
x?		  0   1 x
x*		  0       x(.*    0         (     ))
x+		      x
x{n}	     n x(n       )
x{n,}	    n x
x{n,m}	    n   m x,  n<=m
x|y		|   ,    x y

適用例
1)簡単な応用例
str1 = "you are very good you are a great man"
str2 = "youareverygoodyou are a good man"
print(re.findall(r"(you)",str1))
print(re.findall(r"you",str1))
#  ,        
['you', 'you']
['you', 'you']

print(re.findall(r"[a-z]?",str1))
print(re.findall(r"[a-z]*",str2))
#  
['y', 'o', 'u', '', 'a', 'r', 'e', '', 'v', 'e', 'r', 'y', '', 'g', 'o', 'o', 'd', '', 'y', 'o', 'u', '', 'a', 'r', 'e', '', 'a', '', 'g', 'r', 'e', 'a', 't', '', 'm', 'a', 'n', '']
['youareverygoodyou', '', 'are', '', 'a', '', 'good', '', 'man', '']

print(re.findall(r"[a-z]+",str1))
#  ['you', 'are', 'very', 'good', 'you', 'are', 'a', 'great', 'man']

print(re.findall(r"[a-z]{3}",str1))
#  ['you', 'are', 'ver', 'goo', 'you', 'are', 'gre', 'man']

print(re.findall(r"[a-z]{3,}",str2))
print(re.findall(r"[a-z]{3,4}",str2))
#  ['youareverygoodyou', 'are', 'good', 'man']
['youa', 'reve', 'rygo', 'odyo', 'are', 'good', 'man']

print(re.findall(r"good|great",str1))
#  ['good', 'great']

2)より複雑な応用例
電話番号を判断する正則を書きます.電話番号は1で始まり、長さは11桁、すべての数字です.

print(re.findall(r"^1\d{10}$","123948293403794"))
print(re.findall(r"^1\d{10}$","12394829340"))
print(re.findall(r"^1\d{10}$","1239482934a"))
print(re.findall(r"^1\d{10}$","1239482934"))
#  []
['12394829340']
[]
[]

メールアドレス正則:5-11ビット数字または小文字,@qq.com/@163.com/@sina.cn
print(re.match(r"^[0-9a-z]{5,11}(@qq\.com|@163\.com|@sina\.cn)$","[email protected]"))
print(re.match(r"^[0-9a-z]{5,11}(@qq\.com|@163\.com|@sina\.cn)$","[email protected]"))
#  
None


抽出:you...man
str1 = "you are a good mannn,you are a nice mannn ,you are a great man,you are a..."
print(re.findall(r"you.*?man",str1))
#  ['you are a good man', 'you are a nice man', 'you are a great man']
#   /*...*/
str2 ="/*  part1  *//*  part2  *//*  part3  */"
print(re.findall(r"/\*(.*?)\*/",str2))
#  ['  part1  ', '  part2  ', '  part3  ']