#collections模块 #namedtuple: 给元祖中的元素定义。 from collections import namedtuple # stuct_time = namedtuple('l_time',('year','month','day','mday','wday')) # tu = stuct_time('2018','5','21','108','1') # print(tu.year) #queue: 数据容器,先进先出。进去的数据放在一个黑盒中,看不到 # import queue # l = queue.Queue() # l.put(1) # l.put(2) # print(l.get()) #第一个值 1 #deque 双向队列,可以两边加入.append() .appendleft() .pop() .popleft() from collections import deque # l = deque() # l.append(1) # l.appendleft(2) # print(l) # print(l.pop()) #默认删除最后一个 #OrderedDict: 使字典有序 ([(,),(,),(,)]) from collections import OrderedDict # dic = OrderedDict([('a',2),('c',1),('b',3)]) # print(dic) # dic['z'] = 1 # print(dic) #defalutdict:设置默认值 # from collections import defaultdict # dic = defaultdict(list) #设置默认值是[] # print(dic['a']) #查找的时候自动将‘键’和默认的值加进去 # print(dic['b']) # print(dic)
#正则表达式 #一、判断字符串是否符合要求 #二、找到一串字符串中符合要求的内容 #字符组 [] : 约束一个字符,可以设置范围。 #元字符 \w[数字、字母、下划线] \s[空格、\n\t] \d[数字] : 与字符组一样,只能约束一个字符。 # \W 非 \S 非 \D 非 #^ ...: 字符串必须以...开头。一定要放在...前面。 [^ ...]: 非... #$ :字符串必须以...结尾。一定要放在...后面。 #^...$ : 匹配的内容必须是中间的... 一模一样的。 #| : 或。 例:ab | abc则会找到ab就停止,所以前面一定要放长的。 #匹配11位电话号码: # print(re.findall('1[3-9]\d{9}','18842697252')) #字符组的范围[3-9]中间是- 。 # 控制\d的出现次数: # {9} \d出现9次 # {1,} \d出现至少1次 # {1,4} \d出现1~4次都行,不少于1次不多于4次 # + 1次或以上 # * 0次或以上 # ? 0次或1次 #身份证号: #第一种: # ret = re.search('[1-9]\d{14}(\d{2}[\dx])?','211121199910112005') # print(ret.group()) #第二种(用或“|”) # ret = re.search('^[1-9]\d{16}[\dx]|[1-9]\d{14}$','211121199910112005888') # print(ret.group()) # print(re.findall('>.*?<','>hoagnejd<fjuejk<hehnd')) #>hoagnejd< #\ :转意 #.*?:表示找到?后面的字符前重复最小次数。最小0次。直到找到时停止。 #如果不加?,则*会没有限制然后一直找到最后,再回溯回来找< 。#结果就会为 >hoagnejd<fjuejk< #findall:生成一个列表。找到所有符合条件的结果,然后放到一个列表里。 # print(re.findall('\d+','123jsdha889')) #['123','889'] #默认只显示分组中的值。解决:(?: ...)如: # print(re.findall('\w{1}(\d+)','_123')) # print(re.findall('\w{1}(?:\d+)','_123')) #再分组中加?: 则改变默认输出。 # g = re.findall('\d+\.\d+|(\d+)','hae12hoa385h40.35ha') #取字符串中的整数 # g.remove('') #对整数分组以后,小数显示出来是空格,然后去掉空格,就能取到字符串中的整数了。 # print(g) #或者的情况,其中一个分组以后,另一种情况的结果显示空格。 #search: 生成一个对象,找到符合条件的第一个结果。 # g = re.search('\d+','hai8374jah22jh') # print(g.group()) #8374 #match: 生成一个对象,必须以正则的条件开头,结果为开头的字符串。 # g = re.match('ab','ab888') # print(g.group()) #split:生成一个列表。以正则的条件分割。 # print(re.split('\d+','joiae83nhe93nd9304nw')) #多个字母的话,字母要放在[]中,就从左到右依次分割。 # print(re.split('[ohn]','joiae83nhe93nd9304nw')) #sub/subn: sub是按照正则的'旧''新'来替换字符串中的字符。 subn是除替换后的结果还有替换了的次数 # print(re.sub('a','l','aunjunaie')) #生成的就是替换后的字符串 # print(re.subn('a','l','aunjunaie')) #生成的是一个元祖(字符串,次数) #complie:如果同一个正则需要用很多次时,可以先将次正则编译,然后再对其它各种字符串进行操作。 # ret = re.compile('\d+') # print(ret.split('183huend993jaiek33')) # g = ret.search('hehie93ni390nje0') # print(g.group()) #finditer:将符合条件的结果放进迭代器中 # ret = re.finditer('\d+','he00ha93dkk33m4') # ret1 = next(ret) #next()一下只显示第一条 # ret2 = ret1.group() # print(ret2) # for i in ret: # print(i.group()) #group(): ()中: 默认0, 全部 # 1,显示第一个分组 2,显示第二个分组 # 组名,显示次组的值。 #需要两个分组匹配的值相等。第一种:\\1 第二种:(?P <组名>正则) (?P= 组名) P必须大写。 # ret = re.search('(?P<tag>\w+)\*(?P=tag)','h1*h1') # ret = re.search('(?P<tag>\w+)\*\\1','h1*h1') #\\1不需要分组括号。 # print(ret.group()) # print(ret.group(1)) # print(ret.group('tag')) #爬虫
一、正则表达式
二、collections模块