正则
#__author:86188 #date: 2020/7/20 import re #字符串 s=' w e r ' x=s.split() #这个开头和结尾的空格不打印 #x=s.split(' ') print(x) s='hello world' #找到所有匹配的内容放到一个列表里,前面的是匹配规则,后面的是匹配对象 print(re.findall("wr",'hello world')) #元字符 #.通配符 . #^ 开始阶段匹配 #$ 结尾匹配 #重点 *,+,?,{}都是描述前面一个字母或符号的,修饰功能 *={0,+00} +={1,+oo} ?={0,1} 表示正无穷的方法就是不加,但是要注意逗号 #参见word print(re.findall("^h...",'hello world')) #注意 列表中会出现'' , *号的特殊之处 ,两种可能 print(re.findall("",'hello world')) print(re.findall('e*','hello world')) #实际上等价于两种 情况,1是'',而是'eeeeee。。'e是任意多个 print(re.findall(".*",'hello world')) print(re.findall("el*",'hello woreld')) #单个字符只会被匹配一次。不会出现匹配'ell'出现三个结果'e' 'ell' 'el' # #{} print(re.findall("l{2}",'hello woreld')) print(re.findall("l{1,3}",'hello woreld')) #字符集 # [] 里面只匹配一个字符,多选一 取消元字符的特殊功能(\ ^ - 例外) # [a,*] 这表示字符 'a' '*' ',' 也就是说不需要加',' print(re.findall("e[l,l]",'hel,lo wore,ld')) print(re.findall("[a-z]",'hello woreld')) #['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'e', 'l', 'd'] #[^] 取反 表示非't'、非'l',但是规则表示的也是一个字符 print(re.findall("[^tl]",'hel,lo woret,ld')) # #\ #反斜杠跟元字符去除特殊功能 #反斜杠跟普通字符实现特殊功能 #********* #\d 匹配数字0-9,相当于[0-9] #\D 匹配任何非数字字符,相当于[^0-9] #\s 匹配任何空白字符,相当于[\t\n\r\f\v] #\S 匹配任何非空白字符,相当于[^\t\n\r\f\v] #\w 匹配任何字母数字字符,相当于[0-9a-zA-Z] #\W 匹配任何非字母数字字符,相当于[^0-9a-zA-Z] #\b 匹配一个特殊字符 #**********先python对规则进行解释,两个'\' 变一个,然后传给re模块,可能re也需要转义,因此思考时进行逆向思维, # 1.先确定python中需要匹配的字符串内容,如'\n' 代表着'\\n" # 2.从re开始 # #print(re.findall("[d\n]",'hel,lo wo\\bret,\\d\\\\b\nl\bd\n')) # # print(re.findall("[ln]",'hel,lo woret,l\nd')) # # print(re.findall("[l\a{]",r'heal\\\,l\o wo\ret,l\{\\nd'))#匹配'l'或'\\' # print(re.findall("[l\\.]",'hel,lo wo.ret,l\\nd')) # 匹配‘l' 或’.' # # print(re.findall("I\\\\b",'hello,I\\b am \\ba lIbst')) #注意 # print(re.findall("\\nb",'hello,I\\b am \d\ba \nblI\\nbst')) #注意 # #找到第一个符合规则的内容,search 匹配成功返回结果是一个对象只返回第一个匹配的结果,若没有匹配则是None对象,调用grouph会报错 x=re.search(r"\bs","sdfw\dg(s(\b\\n") print('======') print(x.group()) #print('\b') # x=re.search("a\.","sdsfwgsbn") #()表示可以匹配多个组的内容,至少一个组, x=re.search("(as)+","assdfw\dg(assaass(\b\\n") # asas print(x.group()) #|匹配两者都可以 x=re.search("(as)|3","3asasdfw\dg(assasass(\b\\n") print(x.group()) #文件路径的匹配 命名分组匹配的固定格式 ret=re.search("(?P<id>\d{3})/(?P<name>\w{3})","weeeew34ttt123/ooo")# #ret=re.search("www.(\w+).com","www.baidu.com")# 这里只会把分组的内容取出来,输出'baidu' print(ret) #写成(?:\w+)表示取消优先级 print(ret.group()) print(ret.group('id')) print(ret.group('name')) # 123/ooo # 123 # ooo #match 只能匹配在开头的第一个内容,比search多了一个开头限制 ret=re.match("asd","adfga asd ") # print(ret) # print(ret.group()) #re.split() 先对’j'分割,然后对'sd'和'k,sal'进行按's'分割 #也可以理解从前往后一次对's','j'进行分割 ret=re.split("[j,s]","sjk,sal")#['', '', 'k', '', 'al'] print(ret) #re.sub('规则','替换的内容','字符串') ret=re.sub("a..x","s..b","ealexsdx",1) #替换次数 ret=re.subn("a..x","s..b","ealexsdx") #编程元组了,多了一个数字 s='wert' s=s.replace('r','s') print(s) print(ret) #***********re.comple() 将规则编译成一个对象 obj=re.compile("\.com") ret=obj.findall("www.baidu.com") print(ret) obj.findall("") #计算器 匹配到最里层括号 注意前面的*,+,? 都是贪婪匹配 后面加个?就是惰性匹配 #re.search("\([^()]+\)") print(re.findall("[.*+]","a.sd+")) #此时.,*,+都是普通字符 #迭代器 想取来取元素加group() ret=re.finditer("\d",'ds2sy4784a') print(next(ret)) print(next(ret).group())