随笔 - 60  文章 - 2 评论 - 0 trackbacks - 0

p113-

re模块

  • re.split()

    import re
    result = re.split('\d+','asdf456iuiu')
    print(result) #['asdf', 'iuiu']
    
    result = re.split('(\d+)','asdf456iuiu')
    print(result) #['asdf', '4564', 'iuiu']  把用来分割的数字也保留了,字符串里的分割就没保留,因为字符串已经知道按照什么分割,这里是用正则表达式分割
    
    result = re.split('\d(\d)\d','asdf456iuiu')
    print(result) #['asdf', '5', 'iuiu'] 只保留了中间的数字5
    
  • re.sub()

    result = re.sub('\d+','A','aaa123bbb455ccc')
    print(result) # aaaAbbbAccc   把所有数字串都替换成大写A
    
    result = re.sub('\d+','A','aaa123bbb455ccc',1)
    print(result) # aaaAbbb455ccc   只替换第一个遇到的数字串
    
  • re.subn()

    result = re.subn('\d+','A','aaa123bbb455ccc')
    print(result) # ('aaaAbbbAccc', 2)   全部替换 然后提示替换次数
    
  • re.match()

    result = re.match('\d+','aaa123bbb455ccc')
    print(result) #None
    
    result = re.match('\d+','000aaa123bbb455ccc')
    print(result) #<re.Match object; span=(0, 3), match='000'>   match 从头匹配
    #相当于
    result = re.search('^\d+','000aaa123bbb455ccc')
    print(result) #<re.Match object; span=(0, 3), match='000'>
    
  • match 和 search

    • match : 规定这个字符串必须是什么样的
    • search :用来寻找字符串中是否含有满足条件的子内容
  • re.compile()

    • 对同一个正则表达式解析,节省时间

    • ret1 = re.compile('\d+')
      res1 = ret1.search('asdf3423sdf')
      res2 = ret1.findall('asdf3423sdf')
      print(res1) #<re.Match object; span=(4, 8), match='3423'>
      print(res2) #['3423']
      
  • re.finditer()

    • ret = re.finditer('\d+','asdf23423gfgdfg45654')
      for i in ret:
          print(i.group()) # 返回两行 数字  节省空间
      
  • 即节省空间,又节省时间 先 compile 再 finditer

ret1 = re.compile('\d+')
ret2 = ret1.finditer('asdf23423gfgdfg45654')
for i in ret2:
    print(i.group()) 
  • 分组命名 (?P<名字>正则表达式)
ret = re.search('\d\w+?\d(\d)(?P<aaa>\w+)','2115sssdf@#4fds544fssssdf21_2234')# 加问号 尽可能少,至少1个
print(ret.group('aaa')) # sssdf
html = '<ul><li>aaa</li><li>bbb</li><li>ccc</li></ul> <ol></ol><ul></ul>'
regex = '<(?P<tag>\w+)>.*?</(?P=tag)>' #从文本头开始,把遇到的第一个标签里的内容取出来 标签首尾呼应
ret = re.search(regex,html)
print(ret.group())
html = 'class="my_class"><ul><li>aaa</li><li>bbb</li><li>ccc</li></ul> <ol></ol><ul></ul>'
regex = '<(?P<tag>\w+)>.*?</(?P=tag)>' #从文本头开始,把遇到的第一个标签里的内容取出来 标签首尾呼应
ret = re.search(regex,html)
print(ret.group()) #<ul><li>aaa</li><li>bbb</li><li>ccc</li></ul>
html = 'class="my_class"><ul><li>aaa</li><li>bbb</li><li>ccc</li></ul> <ol></ol><ul></ul>'
regex = r'<(\w+)>.*?</\1>' #r格式化字符串,\1代表第一个分组的名字
ret = re.search(regex,html)
print(ret.group()) #<ul><li>aaa</li><li>bbb</li><li>ccc</li></ul>
#匹配字符串中所有整数,其中有个40.35,是小数,可以先匹配出来 再删除
str1 = '1-2*(60+(-40.35/5)-(-4*3))'
regex = r'\d+\.\d+|(\d+)'
ret = re.findall(regex,str1)
ret2 = filter(lambda n:n,ret)
print(list(ret2)) #['1', '2', '60', '5', '4', '3']
posted on 2020-07-22 18:01  94小渣渣  阅读(16)  评论(0编辑  收藏