python之路----常用模块

    re 模块

                 import re        (要使用模块,在开头写上)

              注意:永远不要起一个py文件的名字,这个名字和你已知的模块同名!!!!!!!!

                  查找              


   .findall:匹配所有,每一项都是一个元素

     语法:findall(正则表达式,要判断的字符串)

     返回值是一个   列表

import re
res = re.findall("\d+","dshfd587sdsf982")    #正则表达式,待匹配的字符串.
print(res)
ret = re.findall("\d","dshfd587sdsf982")
print(ret)

结果:
['587', '982']
['5', '8', '7', '9', '8', '2']

    .search:只匹配从左到右的第一个,得到的不是直接的结果,而是一个变量,通过这个变量的group方法来得到结果,

                  如果没有匹配到,会返回None,使用group会报错.

           语法:search(正则表达式,待匹配字符串)

          直接返回是一个内存地址,通过group()返回的是真正的结果

import re
ret = re.search("\d+","dshfd587sdsf982")
print(ret)                  #内存地址,正则匹配的结果
print(ret.group())           #通过ret.group()获取真正结果


ret = re.search('\d+','sjkhk172按实际花费928')
if ret :                     #内存地址,这是一个正则匹配的结果,如果匹配到,则走if
    print(ret.group())        #通过ret.group()来获取真正的结果


res = re.search("\d","asdfgvcxzds")
print(res)
print(res.group())

结果:
<_sre.SRE_Match object; span=(5, 8), match='587'>
587

172

None
Traceback (most recent call last):
  File "E:/wanchengdezuoye/复习/复习.py", line 1482, in <module>
    print(res.group())
AttributeError: 'NoneType' object has no attribute 'group'

     .match:从头开始匹配,相当于search中的正则表达式加上一个 ^ 

         语法:match(正则表达式,待匹配字符串)

         返回的是一个内存地址,也是要用group()返回真正的值

import re
ret = re.match('\d+$','172sjkhk按实际花费928')
print(ret)       #match相当于search 加 ^ ,属于以xxx开头,加上 $ 后,属于以xxx开头,以xxx结尾.
                  #而且 ^和$ 默认是整个字符串是否以xxx开头,结尾.
结果:
None

import re
ret = re.match("\d+$","196123456789928")
print(ret.group())

结果:
196123456789928

  字符串处理的扩展:替换 切割            

   .split:切割

import re
s = "asdf45fgh89sdcvf23" 
ret = re.split("\d+",s)      #以数字为切割符
print(ret)


结果:
['asdf', 'fgh', 'sdcvf', '']


import re
s = "asdf45fgh89sdcvf23aaa"
ret = re.split("\d+",s)
print(ret)

结果:
['asdf', 'fgh', 'sdcvf', 'aaa']

     .sub:替换,(旧的,新的,要替换的字符串,次数)

import re
s = "asd45zxc89wer910rrr"
ret = re.sub("\d+","A",s)    #将字符串s中的数字换成A
print(ret)

结果:
asdAzxcAwerArrr

import re
s = "asd45zxc89wer910rrr"
ret = re.sub("\d+","A",s,1)   #将字符串中的数字换成A,要替换的次数为1次
print(ret)

结果:
asdAzxc89wer910rrr

      .subn:返回一个元组,第二个元素师替换的次数

import re
s = "asd45zxc89wer910rrr"
ret = re.subn("\d+","A",s)
print(ret)

结果:
('asdAzxcAwerArrr', 3)

    re模块的进阶:时间/空间的节省       

      .compile:节省你使用正则表达式解决问题的时间  

                       将正则表达式   编译成    字节码  ,在下面的多次使用中  不用多次编译了

                      语法:compile(正则表达式)

                     返回的是编译后的正则表达式的内存地址

import re
s = re.compile("\d+")    #已经编译完了
print(s)
ret = s.findall("asdf45fgh89sdcvf23aaa")
print(ret)
res = s.search("asdf45fgh89sdcvf23aaa")
print(res.group())

结果:
re.compile('\\d+')
['45', '89', '23']
45

        .finditer:节省你使用正则表达式解决问题的空间/内存

             语法:finditer(正则表达式,待匹配字符串)

             返回的是一个可迭代对象的内存地址,可以循环之后用group()得到真正的结果

s = re.finditer("\d+","asd45zxc89wer910rrr")
for i in s:
    print(i.group())

结果:
45
89
910

           *******分组在re模块中的使用:                

   格式:优先级对findall()使用,如果正则表达式中有分组, (? : 正则表达式) 取消优先级

           分组对 search 序列标号提取要匹配的, 或者对该分组命名 格式  (? p <name>)

           同时对HTML格式提取,  "<(?P<count>\w+)>(\w+)</(?P=count)>"   前面和后面的判断必须一样

import re
s = '<a>wahaha</a>' # 标签语言 html 网页 ret = re.search(">(\w*)<",s)
#为了findall也可以顺利取到分组中的内容,有个特殊语法,也就是优先显示分组中的内容print(ret.group(1)) ret = re.findall(">(\w*)<",s) # 优先级 print(ret) s1 = "515.64123165" ret2 = re.findall("\d+(?:.\d+)?",s1) # 取消优先级 print(ret2) 结果:

wahaha
['wahaha']
['515.64123165']

import re
s = "<a>wahaha</a>" #标签语言 html
= re.search("<(\w+)>(\w+)</(\w+)>",s) #可以根据分组的位置标号提取 print(ret1.group()) #所有的结果 print(ret1.group(1)) print(ret1.group(2)) print(ret1.group(3))

<a>wahaha</a>
a
wahaha
a


import re
s = '<a>wahaha</a>' ret1
= re.search("<(?P<con>\w+)>(?P<con1>\w+)</(?P<con2>\w+)>",s) # 可以根据分组的名字提取 print(ret1.group()) print(ret1.group('con')) print(ret1.group('con1')) print(ret1.group('con2'))
结果:

<a>wahaha</a>
a
wahaha
a


s = '<a>wahaha</a>'
ret6 = re.search("<(?P<conu>\w+)>(\w+)</(?P=conu)>",s)     #要求使用这个名字的分组和前面同名分组中的内容匹配必须一致
print(ret6.group())

结果:
<a>wahaha</a>

猜你喜欢

转载自www.cnblogs.com/zmc940317/p/9494925.html