python模块--re模块

import re
# ret = re.findall('\d+','19740ash93010uru')
# print(ret)
#
# ret = re.search('\d+','19740ash93010uru')
# print(ret)  # 变量
# if ret:
#     print(ret.group())

# 预习一个现象并且找到答案 - 分组有关系()
# findall 还是按照完整的正则进行匹配,只是显示括号里匹配到的内容
# ret = re.findall('9\d\d','19740ash93010uru')
# print(ret)

# search 还是按照完整的正则进行匹配,显示也显示匹配到的第一个内容,但是我们可以通过给group方法传参数
# 来获取具体文组中的内容
# ret = re.search('9(\d)(\d)','19740ash93010uru')
# print(ret)  # 变量
# if ret:
#     print(ret.group())
#     print(ret.group(1))
#     print(ret.group(2))

# findall
    # 取所有符合条件的,优先显示分组中的
# search 只取第一个符合条件的,没有优先显示这件事儿
    # 得到的结果是一个变量
        # 变量.group() 的结果 完全和 变量.group(0)的结果一致
        # 变量.group(n) 的形式来指定获取第n个分组中匹配到的内容

# 为什么在search中不需要分组优先 而在findall中需要?

# 加上括号 是为了对真正需要的内容进行提取
# ret = re.findall('<\w+>(\w+)</\w+>','<h1>askh930s02391j192agsj</h1>')
# print(ret)

# search
# ret = re.search('<(\w+)>(\w+)</\w+>','<h1>askh930s02391j192agsj</h1>')
# print(ret.group())
# print(ret.group(1))
# print(ret.group(2))

# 为什么要用分组,以及findall的分组优先到底有什么好处
exp = '2-3*(5+6)'
# a+b 或者是a-b 并且计算他们的结果
# ret = re.search('\d+[+]\d+',exp)
# print(ret)
# a,b = ret.split('+')
# print(int(a)+int(b))


# ret = re.search('(\d+)[+](\d+)',exp)
# print(ret)
# print(ret.group(1))
# print(ret.group(2))
# print(int(ret.group(1)) + int(ret.group(2)))


# with open('douban.html',encoding='utf-8') as f:
#     content = f.read()
# ret = re.findall('<span class="title">(.*?)</span>(?:\s*<span class="title">.*?</span>)?',content)
# print(ret)
# 如果我们要查找的内容在一个复杂的环境中
# 我们要查的内容并没有一个突出的 与众不同的特点 甚至会和不需要的杂乱的数据混合在一起
# 这个时候我们就需要把所有的数据都统计出来,然后对这个数据进行筛选,把我们真正需要的数据对应的正则表达式用()圈起来
# 这样我们就可以筛选出真正需要的数据了



# 什么是爬虫
    # 通过代码获取到一个网页的源码
    # 要的是源码中嵌着的网页上的内容   -- 正则表达式
# import requests
# ret = requests.get('https://movie.douban.com/top250?start=0&filter=')
# print(ret.content.decode('utf-8'))

# 分组和findall的现象
    # 为什么要用分组?
        # 把想要的内容放分组里
# 如何取消分组优先
    # 如果在写正则的时候由于不得已的原因 导致不要的内容也得写在分组里
    # (?:)  取消这个分组的优先显示

 

 

# findall
# search
import re
# split
# ret = re.split('\d+','alex222wusir')
# ret = re.split('\d(\d)\d','alex123wusir')
# print(ret)

# sub  替换
# ret = re.sub('\d+','H','alex123wusir456',1)
# print(ret)

# subn
# ret = re.subn('\d+','H','alex123wusir456')
# print(ret)

# match  用户输入的内容匹配的时候,要求用户输入11位手机号码,^手机号正则$
# match('手机号正则$','123eva456taibai')  规定这个字符号必须是什么样的
# search('^手机号正则$','123eva456taibai') 用来寻找这个字符串中是不是含有满足条件的子内容

# ret = re.match('\d+','123eva456taibai')
# print(ret.group())

# ret = re.search('^\d+','123eva456taibai')
# print(ret.group())

# compile -- 节省代码时间的工具
    # 假如同一个正则表达式要被使用多次
    # 节省了多次解析同一个正则表达式的时间
# ret = re.compile('\d+')
# res1 = ret.search('alex37176')
# res2 = ret.findall('alex37176')
# print(res1)
# print(res2)

# finditer -- 节省空间
# ret = re.finditer('\d+','agks1ak018093')
# for i in ret:
#     print(i.group())

# 先compile(如果没有重复使用同一个正则,也不能节省时间)
# 再finditer
# ret= re.compile('\d+')
# res = ret.finditer('agks1ak018as093')
# for r in res:
#     print(r.group())

# 列表不能用insert
# 列表不能用pop(n)

# 功能
# 性能
    # 时间 :
        # 你要完成一个代码所需要执行的代码行数
        # 你在执行代码的过程中,底层程序是如何工作的
    # 空间
        # 是占用了宝贵的内存条资源
        # 影响程序的执行效率
# 用户体验

 

# 分组命名
# import re
# ret = re.search('\d(\d)\d(\w+?)(\d)(\w)\d(\d)\d(?P<name1>\w+?)(\d)(\w)\d(\d)\d(?P<name2>\w+?)(\d)(\w)',
#           '123abc45678agsf_123abc45678agsf123abc45678agsf')
#
# print(ret.group('name1'))
# print(ret.group('name2'))

# (?P<名字>正则表达式)
# ret.group('名字')

# 分组命名的引用
# import re
# exp= '<abc>akd7008&(&*)hgdwuih</abb>008&(&*)hgdwuih</abd>'
# ret= re.search('<(?P<tag>\w+)>.*?</(?P=tag)>',exp)
# print(ret)

import re
# exp= '<abc>akd7008&(&*)hgdwuih</abc>008&(&*)hgdwuih</abd>'
# ret= re.search(r'<(\w+)>.*?</\1>',exp)
# ret= re.search('<(\w+)>.*?</\\1>',exp)
# print(ret)

import re
# ret=re.findall(r"\d+\.\d+|(\d+)","1-2*(60+(-40.35/5)-(-4*3))")
# print(ret)
# ret = ['1', '2', '60', '', '5', '4', '3','','']
# ret.remove('')
# print(ret)
# ret = filter(lambda n:n,ret)
# print(list(ret))

# 分组命名(?P<组名>正则) (?P=组名)
# 有的时候我们要匹配的内容是包含在不想要的内容之中的,
    # 只能先把不想要的内容匹配出来,然后再想办法从结果中去掉

 

posted @ 2020-06-15 09:27  水晶冰洛  阅读(224)  评论(0编辑  收藏  举报