1、re&正則表達式
2、hashlib
一:re模塊&正則表達式
正則:正則就是用一些具有特殊含義的符號組合到一起(稱為正則表達式)來描述字符或者字符串的方法。或者說:正則就是用來描述一類事物的規則。(在Python中)它內嵌在Python中,並通過 re 模塊實現。正則表達式得到的是一個列表。
import re
\w 匹配字母數字下划線:
res = re.findall('alex','hahhaha alex is alex is dsb') #逐字匹配,一旦匹配成功就會完整跳過匹配上的字符串。例如在abcabcabca中,能夠尋找到的abca為括號中的內容(abca)bc(abca)
print(res)
輸出結果:
['alex', 'alex']
print(re.findall('\w','Aa12 _+-'))
輸出結果:
['A', 'a', '1', '2', '_']
print(re.findall('\w\w','Aa12 _+-')) #得到兩個連續的列表\數字\下划線
輸出結果:
['Aa', '12']
print(re.findall('\w9\w','Aa912 s9_+-')) #得到三個連續的列表\數字\下划線,其中中間的字符必須是9
輸出結果:
['a91', 's9_']
print(re.findall('^alex','alex id alex')) #^表示近從頭開始匹配
print(re.findall('^alex',' alex id alex')) #此處開頭有空格
輸出結果:
['alex']
[]
print(re.findall('alex$',' alex id alex')) #$表示從文件末尾開始尋找,末尾沒有就返回空列表
輸出結果:
['alex']
. 代表一個字符,該字符可以是除換行符之外的任意字符
print(re.findall('a.c','a a1c aaac a c jkdsajfkd')) #得到三個字符,首尾是ac,中間是除換行符之外的任意字符
輸出結果['a1c', 'aac', 'a c']
print(re.findall('a.c','a a1c aaac a c jkda\ncd')) #\n表示換行符
輸出結果為:
['a1c', 'aac', 'a c']
print(re.findall('a.c','a a1c aaac a c jkda\ncd',re.DOTALL)) #re.DOTALL表示.可以代表所有的字符,包括換行符(\n當成一個字符來處理)
輸出結果為:
['a1c', 'aac', 'a c', 'a\nc']
[]代表匹配一個字符,這一個字符可以自定義范圍。# [a,]表示a或者,!!!
print(re.findall('a[0-9]c','a a1d a2ca aaa a\nc',re.DOTALL)) #獲得一個首尾兩端為ac且中間為0~9中的一個數字的字符串列表。[0-9]中的橫杠表示從哪到哪的意思,表示的是一個范圍。
輸出結果為:
['a2c']
print(re.findall('a[a-zA-Z]c','a aac a2ca aAc a\nc',re.DOTALL)) #獲得一個首尾為ac的,中間是從a到z或從A到Z的字符串列表
輸出結果為:
['aac', 'aAc']
print(re.findall('a[ac]c','a aac a2ca aAc a\nc',re.DOTALL)) #獲得一個首尾為ac,中間為a或者c的字符串列表
輸出結果為:
['aac']
如下例子會報錯!因為當橫杠在中間時表示的是范圍!
print(re.findall('a[+-#/]c','a+c a-c a/c a*c a3c a\nc',re.DOTALL))
解決方法是改為[-+#/][+#/-][+\-#/] 將橫杠改為中括號內的首尾,或者加上轉義符反斜杠
print(re.findall('a[+\-#/]c','a+c a-c a/c a*c a3c a\nc',re.DOTALL))
修改后的輸出結果為:
['a+c', 'a-c', 'a/c']
重復匹配: ?*+{n,m}均不能單獨使用,左側必須有字符。
?代表左邊那一個字符出現0次到1次
print(re.findall('ab?','a ab abb abbb a123b a123bbb'))
輸出結果:
['a', 'ab', 'ab', 'ab', 'a', 'a']
*代表左邊那一個字符出現0次到無窮次
print(re.findall('ab*','a ab abb abbb a123b a123bbb'))
輸出結果:
['a', 'ab', 'abb', 'abbb', 'a', 'a']
+代表左邊的那一個字符出現1次到無窮次
print(re.findall('ab+','a ab abb abbb a123b a123bbb'))
輸出結果:
['ab', 'abb', 'abbb']
{n,m}代表左邊那一個字符出現n次到m次
print(re.findall('ab{1,3}','a ab abb abbb a123b a123bbb'))
print(re.findall('ab{1,}','a ab abb abbb a123b a123bbb')) #等同ab+
print(re.findall('ab{0,}','a ab abb abbb a123b a123bbb')) #等同ab*
print(re.findall('ab{3}','a ab abb abbb a123b a123bbb')) #指定出現3次
輸出結果為:
['ab', 'abb', 'abbb']
['ab', 'abb', 'abbb']
['a', 'ab', 'abb', 'abbb', 'a', 'a']
['abbb']
[^]取反:
print(re.findall('a[^0-9]c','a a1d a2ca aac a\nc',