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('ww','Aa12 _+-')) #得到两个连续的列表数字下划线
输出结果:
['Aa', '12']
print(re.findall('w9w','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
cd')) #
表示换行符
输出结果为:
['a1c', 'aac', 'a c']
print(re.findall('a.c','a a1c aaac a c jkda
cd',re.DOTALL)) #re.DOTALL表示.可以代表所有的字符,包括换行符(
当成一个字符来处理)
输出结果为:
['a1c', 'aac', 'a c', 'a
c']
[]代表匹配一个字符,这一个字符可以自定义范围。# [a,]表示a或者,!!!
print(re.findall('a[0-9]c','a a1d a2ca aaa a
c',re.DOTALL)) #获得一个首尾两端为ac且中间为0~9中的一个数字的字符串列表。[0-9]中的横杠表示从哪到哪的意思,表示的是一个范围。
输出结果为:
['a2c']
print(re.findall('a[a-zA-Z]c','a aac a2ca aAc a
c',re.DOTALL)) #获得一个首尾为ac的,中间是从a到z或从A到Z的字符串列表
输出结果为:
['aac', 'aAc']
print(re.findall('a[ac]c','a aac a2ca aAc a
c',re.DOTALL)) #获得一个首尾为ac,中间为a或者c的字符串列表
输出结果为:
['aac']
如下例子会报错!因为当横杠在中间时表示的是范围!
print(re.findall('a[+-#/]c','a+c a-c a/c a*c a3c a
c',re.DOTALL))
解决方法是改为[-+#/][+#/-][+-#/] 将横杠改为中括号内的首尾,或者加上转义符反斜杠
print(re.findall('a[+-#/]c','a+c a-c a/c a*c a3c a
c',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',