re模块

一、findall与search方法

import re


ret = re.findall('\d', '19621asd1695412rf')
print(ret)

ret1 = re.search('\d+r', '19621asd1695412rf')
print(ret1) # 对象
if ret1:
    print(ret1.group())


# 分组现象 # findall 按照完整的正则进行匹配,但是显示括号里匹配到的内容 ret2 = re.findall('9(\d)\d', '19621asd1695412rf') print(ret2) ret3 = re.search('9(\d)(\d)', '19621asd1695412rf') print(ret3) # 对象 if ret3: print(ret3.group()) # 取第一个符合正则的内容 print(ret3.group(1)) # group(n)指定获得的第n个分组匹配到的内容 print(ret3.group(2)) # 为什么在search中不需要分组优先,而在findall中需要? # findall # 加上括号,是为了对真正需要的内容进行提取 s = '<h1>dasdsa930sadsa02391-</h1>' ret = re.findall('<.*?>(.*)</.*?>', s) print(ret[0]) # search ret = re.search('<.*?>(.*)</.*?>', s) print(ret.group(1)) # 为什么要用分组,以及findall的分组优先 s1 = '2-3*(5+6)' # 匹配出a+b 或者a-b 并计算它们的结果 ret = re.findall('(\d+)\+(\d+)', s1) print(ret) print(int(ret[0][0]) + int(ret[0][1])) # with open('movie_name.txt', encoding='utf-8') as f: #print(f.read()) content = f.read() r = re.findall('<span class="title">(.*?)</span>.*?</a>', content, flags=re.S) print(r) print(len(r)) # 如果我们要查找的内容在一个复杂的环境中 # 我们要查找的内容并没有一个突出的特点,甚至会和不需要的数据杂乱的混合在一起 # 这个时候我们就需要把所有的数据都统计出来,然后对这个数据进行筛选,把我们真正 # 需要的数据对应的正则表达式用()括起来 # 这样我们就可以拿到真正想要的数据啦 # 取消分组的优先级 ret = re.findall('1(?:\d)(\d)', '123') # 取消第一个分组的优先级 print(ret)

二、其他方法

import re

# findall  ***
# search  ***


# # compile  *** --节省代码时间的工具
# # 假如同一个正则表达式要被使用多次,就可以先解析该正则表达式并通过一个变量保存下来
# ret = re.compile('\d+')
# print(ret.findall('s961gdx123fd'))
#
#
# # finditer  *** --节省空间
# ret = re.finditer('\d+', 's961gdx123fd') # 迭代器
# for i in ret:
#     print(i.group())

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


# # match   默认从头开始匹配,一般用来规定该字符串必须是什么样的
# ret = re.match('\d+', '123eva456taibai')
# print(ret.group())


# # split
# ret = re.split('\d+', 'alex222wusir')
# print(ret)
# ret = re.split('\d(\d)\d', 'alex222wusir') # 保留括号内被切掉的内容
# print(ret)
#
#
# # sub  替换  将正则匹配到的内容替换成别的内容
# ret = re.sub('\d+', 'H', 'alex123wusir456')
# print(ret)
#
#
# # subn  # 也是替换,返回替换后的内容和替换的次数形成的元组
# ret = re.subn('\d+', 'H', 'alex123wusir456')
# print(ret)



# 功能
# 性能
    # 时间:
        # 完成一个代码所需要执行的代码行数
        # 执行代码的过程中,底层程序是如何工作的

    # 空间
        # 是占用了宝贵的内存资源
        # 英雄程序的执行效率


# 用户体验

三、分组命名

# 分组命名:(?P<组名>正则)  (?P=组名)
import re

ret = re.search('\d(\d)\d(?P<name1>\w+?)(\d)(?P<name2>\w)', '1231sd1_52432ghbr')
print(ret.group('name1'))
print(ret.group('name2'))


# 分组命名的引用:****
exp = '<h1>sad654a6s4dv</h1><a>5621df</a>'
ret = re.search('<(?P<n1>\w+)>(.*?)</(?P=n1)>', exp)
print(ret.group())
print(ret.group(2))


# 方式二:不常用
# exp = '<h1>sad654a6s4dv</h1><a>5621df</a>'
# ret = re.search(r'<(\w+)>(.*?)</\1>', exp)
# print(ret.group())
# print(ret.group(2))


# r""  取消字符串内部所有的转义
ret = re.search(r'\\n', r'\n')
print(ret.group())

 

  

上一篇:Python ( 高级 第一部)


下一篇:Python正则表达式