Pythonのreモジュール、hashlibモジュール

6.16 reモジュール

一緒に特別な意味や方法を説明した文字列(正規表現と呼ばれる)を持っているいくつかのシンボルの組み合わせを定期的に使用。または:定期的なルールは(Pythonで)物事のクラスを記述するために使用され、それはPythonで埋め込まれ、再モジュールによって実装されます。

モード 例えば 説明 結果
\ワット 印刷(re.findall( '\ W'、 'AB 12 + - *&_')) 英数字とアンダースコアを一致させます [ 'A'、 'B'、 '1'、 '2'、 '_']
\ W 印刷(re.findall( '\のW'、 'AB 12 + - *&_')) 非英数字とアンダースコアをマッチング [」」、 ' \ '、 '+'、 ' - '、 ''、 '*'、 '&']
\ sの 印刷(re.findall( '\ s'は、 'AB \ R1 \ n2は\ T + - *&_')) 空白[\ Rの\ n個の\ Tの\のF]を一致 [ ' '\ R'、 '\ n' は、 '\ T'、'']
\ S 印刷(re.findall( '\のS'、 'AB \ R1 \ n2は\ T + - *&_')) 任意の非空白文字にマッチします [ 'A'、 'B'、 '1'、 '2'、 ' \ '、 '+'、 ' - '、 '*'、 '&'、 '_']
\ dは 印刷(re.findall( '\ dの'、 'AB \ R1 \ n2は\ T + - *&_')) 一致する番号[0-9] [ '1'、 '2']
\ D 印刷(re.findall( '\のD'、 'AB \ R1 \ n2は\ T + - *&_')) 任意の非数字にマッチします [ 'A'、 'B'、 ''、 '\ R'、 '\ n'は、 '\ T'、 ' \ '、 '+'、 ' - '、 ''、 '*'、 '&'、 「]
\ A 印刷(re.findall( '\ Aalex'、 'abcalexがSBです')) 文字列の先頭にマッチします []
^ 印刷(re.findall( '^アレックスは'、 ')アレックスはsalexbです') \ Aと等価 [ 'アレックス']
\ Z 印刷(re.findall( 'SBの\のZ'、 ')アレックスはalexbsbです') 文字列の末尾 [ 'SB']
$ 印刷(re.findall( 'SBの$'、 'アレックスはalexbsbです')) \ Zと同等 [ 'SB']
\ nは 印刷(re.findall( '\ ncの'、 '\ NC A \ TC A1C')) 改行にマッチします [ '\ ncの']
印刷(re.findall( 'a.c'、 'abcのA1C AACA \ NC')) 任意の改行文字に加え、 【 'ABC'、 'A1C'、 'AAC']
re.DOTALL 印刷(re.findall( 'a.c'、 'ABCのA1C AACA \ NC'、re.DOTALL)) 改行を含む任意の文字に一致します  
印刷(re.findall( 'AB?'、 'AB ABB ABBB abbbb abbbb')) 左1つの文字が繰り返さ0または1 [ 'A' は、 '2'、 'は' 'である' 'である' 'です']
* 印刷(re.findall( 'AB *'、 'AB ABB ABBB abbbb abbbb a1bbbbbbb')) 左の文字が0または無限回表示されます [ 'A'、 'B'、 'ER'、 'ABBB'、 'abbbb'、 'abbbb'、 'A']
+ プリント(re.findall( 'AB +'、 'AB ABB ABBB abbbb abbbb a1bbbbbbb')) 文字を左回または無限回以上現れます [ '今'、 'アッベ' ABBB 'Abbbb' Abbbb「]
{M、N} プリント(re.findall( 'AB {0,1}'、 'AB ABB ABBB abbbb abbbb')) M回の文字が左n回までに表示されます [ 'A' は、 '2'、 'は' 'である' 'である' 'です']
。* プリント(re.findall( '* C'、 '交流a123cのaaaacのA * 123)()C asdfasfdsadf')) 任意の長さのマッチ、貪欲任意の文字にマッチ [ '交流a123cのaaaacのA * 123)()C']
。*? 印刷(re.findall( '*?C'、 'a123c456c')) 非欲張りマッチ [ 'a123c']
() 印刷(re.findall( '(アレックス)_sb'、 'alex_sb asdfsafdafdaalex_sb')) 括弧内の式をマッチング [ 'アレックス'、 'アレックス']
       
       

 

print(re.findall('^ebn$','ebn1'))        #[]

print(re.findall('href="(.*?)"','<li><a id="blog_nav_sitehome" class="menu"href="http://www.cnblogs.com/">博客园</a></li>')
) #['http://www.cnblogs.com/']

print(re.findall('a[0-9][0-9]c','a1c a+c a2c a9c a11c a-c acc aAc'))#[]:匹配一个指定范围内的字符(这一个字符来自于括号内定义的) #['a11c']

print(re.findall('a[-+*]c','a1c a+c a2c a9c a*c a11c a-c acc aAc')) #当-需要被当普通符号匹配时,只能放到[]的最左边或最右边 ['a+c', 'a*c', 'a-c']

print(re.findall('a[a-zA-Z]c','a1c a+c a2c a9c a*c a11c a-c acc aAc')) #['acc', 'aAc']

print(re.findall('a[^a-zA-Z]c','a c a1c a+c a2c a9c a*c a11c a-c acc aAc'))# []内的^代表取反的意思
#['a c', 'a1c', 'a+c', 'a2c', 'a9c', 'a*c', 'a-c']
print(re.findall('([a-z]+)_sb','egon alex_sb123123wxxxxxxxxxxxxx_sb,lxx_sb'))#['alex', 'wxxxxxxxxxxxxx', 'lxx']    

print(re.findall('compan(ies|y)','Too many companies have gone bankrupt, and the next one is my company')) #| :或者 ['ies', 'y']
print(re.findall('compan(?:ies|y)','Too many companies have gone bankrupt, and the next one is my company')) #(?:):代表取匹配成功的所有内容,而不仅仅只是括号内的内容 ['companies', 'company']

re模块的其他方法:

print(re.findall('alex|sb','123123 alex sb sadfsadfasdfegon alex sb egon'))#['alex', 'sb', 'alex', 'sb']
print(re.search('alex|sb','123213 alex sb sadfsadfasdfegon alex sb egon').group())#只到找到第一个匹配,然后返回一个包含匹配信息的对象   #alex
print(re.search('^alex','123213 alex sb sadfsadfasdfegon alex sb egon'))# None 匹配不成功返回None而不是[]
print(re.search('^alex','alex sb sadfsadfasdfegon alex sb egon').group())  #alex
print(re.match('alex','alex sb sadfsadfasdfegon alex sb egon').group()) #alex
print(re.match('alex','123213 alex sb sadfsadfasdfegon alex sb egon')) #None
#search+^可以代替match
info='a:b:c:d'
print(info.split(':')) #['a', 'b', 'c', 'd']
print(re.split(':',info)) #['a', 'b', 'c', 'd']

info=r'get :a.txt\3333/rwx'
print(re.split('[ :\\\/]',info)) #['get', '', 'a.txt', '3333', 'rwx']
print('egon is beutifull egon'.replace('egon','EGON',1)) #EGON is beutifull egon
#123 egon is beutifull EGON 123
print(re.sub('(.*?)(egon)(.*?)(egon)(.*?)',r'\1\2\3EGON\5','123 egon is beutifull egon 123'))
#(123)(egon)( is beutifull )(egon)(123)
print(re.sub('(lqz)(.*?)(SB)',r'\3\2\1',r'lqz is SB'))# SB is lqz
#(lqz)(is)(SB)
print(re.sub('([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)([^a-zA-Z]+)([a-zA-Z]+)',r'\5\2\3\4\1',r'lqzzzz123+ is SB')) #SB123+ is lqzzzz           #(lqzzzz)(123+ )(is)( )(SB)
pattern=re.compile('alex')
print(pattern.findall('alex is alex alex')) #['alex', 'alex', 'alex']
print(pattern.findall('alexasdfsadfsadfasdfasdfasfd is alex alex'))  #['alex', 'alex', 'alex']

6.17 hashlib模块

hash是一种算法,该算法接受传入的内容,经过运算得到一串hash值

hash值的特点是:

1 只要传入的内容一样,得到的hash值必然一样(用于明文传输密码、文件完整性校验) 2 不能由hash值返解成内容=======》把密码做成hash值,不应该在网络传输明文密码 3 只要使用的hash算法不变,无论校验的内容有多大,得到的hash值长度是固定的

import hashlib
m=hashlib.md5()

m.update('hello'.encode('utf-8'))
m.update('world'.encode('utf-8'))
m.update('egon'.encode('utf-8'))
print(m.hexdigest()) #3801fab9b8c8d9fcb481017969843ed5
import hashlib
m=hashlib.md5()

m.update('h'.encode('utf-8'))
m.update('e'.encode('utf-8'))
m.update('lloworld'.encode('utf-8'))
m.update('egon'.encode('utf-8'))
print(m.hexdigest()) #3801fab9b8c8d9fcb481017969843ed5

注意:m.update()无论是多次传值还是一次传值,得到的hash值相同

import hashlib
m=hashlib.md5()
with open(r'C:\Users\Desktop\上节课复习','rb') as f:
   for line in f:
       m.update(line)
   hv=m.hexdigest()
print(hv) #98416536bdf1f0dc0776629f501ae469

密码加盐

import hashlib
m=hashlib.md5()

pwd='alex3714'
m.update('天王盖地虎'.encode('utf-8'))
m.update(pwd.encode('utf-8'))
m.update('小鸡炖蘑菇'.encode('utf-8'))

print(m.hexdigest()) #ab44c43ea02e8c1083346ca707a6f572

hashlib.sha256(),hashlib.sha512()

import hashlib

m=hashlib.md5()
m.update('helloworld'.encode('utf-8'))
print(m.hexdigest()) #fc5e038d38a57032085441e7fe7010b0

m=hashlib.sha256()
m.update('helloworld'.encode('utf-8'))
print(m.hexdigest()) #936a185caaa266bb9cbe981e9e05cb78cd732b0b3280eb944412bb6f8f8f07af

m=hashlib.sha512()
m.update('helloworld'.encode('utf-8'))
print(m.hexdigest()) #1594244d52f2d8c12b142bb61f47bc2eaf503d6d9ca8480cae9fcf112f66e4967dc5e8fa98285e36db8af1b8ffa8b84cb15e0fbcf836c3deb803c13f37659a60

hmac 模块 ,它内部对我们创建 key 和 内容 进行进一步的处理然后再加密

import hmac
m=hmac.new('天王盖地虎,小鸡炖模块'.encode('utf-8'))
m.update('alex3814'.encode('utf-8'))
print(m.hexdigest())

おすすめ

転載: www.cnblogs.com/mylu/p/11094163.html