day19:常用模块(collections,time,random,os,sys)

1,正则复习,re.S,这个在用的最多,re.M多行模式,这个主要改变^和$的行为,每一行都是新串开头,每个回车都是结尾。re.L 在Windows和linux里面对一些特殊字符有不一样的识别,re.L 是根据当前的操作系统来识别,这个不推荐使用,他就不一样了。正常还是走我们的记得意思,re.U 这个对于ASCII码是一样的,对于中文才使用Unicode,re.X和re.M有点像

import re
ret = re.findall('.*\d+','hsd739y8kk  \ns99sihf99 g9o3y')
print(ret)
# ['hsd739y8', 's99sihf99 g9o3']
ret = re.findall('.*\d+','hsd739y8kk  \ns99sihf99 g9o3y',re.S)
print(ret) #注意加了flag换行也给匹配了就
# ['hsd739y8kk  \ns99sihf99 g9o3']

2,尖角号必须开头,$符号,必须结尾,不然就是一个错误的正则

3,分组,在正则里面,因为想对多个字符组整体两次约束的,在re模块里面,分组是有优先的(findall,split)

4,|,从左到右匹配,只要匹配上就不继续匹配了,所以应该要把长的放在前面

5,[^],除了分组里面的其他都匹配

6,转义问题,特殊字符,比方说匹配星号要用\*这样才能匹配

# 前面加上r 就没有问题了,建议都加上
ret = re.findall('\\\\s','\s')  #正则需要转义,Python也需要转义的
print(ret)
# ['\\s']
ret = re.findall(r'\\s',r'\s')
print(ret)
# ['\\s']

ret = re.findall('\*','*')
print(ret)

ret = re.findall(r'\*','*')
print(ret)
# 字符组里面是没有两次这一说的,说以正则里面放在字符组里面的特殊字符可以直接匹配,不需要转义
ret = re.findall('[*]','*')
print(ret)

7,但是字符组里面的减号要注意一下,

# 正则里面,只要是特殊字符就都给转义了,就没有问题
ret = re.findall('[-]','-')
print(ret) #  ['-']

ret = re.findall('[1-9]','12-')
print(ret) # ['1', '2']

ret = re.findall('[1\-9]','12-')
print(ret) #['1', '-']

8,正则里面默认是贪婪匹配,量词后面加问号就是非贪婪匹配了,惰性匹配,最常用的.*?abc,一直取,一直到遇到abc为止

9,

猜你喜欢

转载自www.cnblogs.com/lisa-blog/p/10160322.html