re模块有什么用?

  • 在文本或者字符串内获取你所需要的东西
s = '孙悟空找猪八戒找媳妇高翠兰,然后吃西瓜'

import re

res = re.findall('媳妇(.{3})', s)
print(res)
['高翠兰']

re模块的基础使用

import re

s = '孙悟空找猪八戒找媳妇高翠兰,然后吃西瓜,再吃西瓜'

res = re.findall('西瓜', s)
print(res)
['西瓜', '西瓜']

元字符

  • 元字符会有特殊的意义
  • 常用的元字符
    1. ^  从开头进行匹配
2. $ 从结尾进行匹配
3. | 相当于or,或者的意思
4. [] 找到[]内的任意一个元素的所有元素,^放在里面就是反取
5. . 任意一个字符
6. {3}大括号前面的字符匹配3次,{m,n}匹配前一个字符m至n次,{m,}则匹配m至无限次
7. * 前面的字符匹配0-无穷个
8. + 前面的字符匹配1-无穷个
9. ? 前面的字符匹配0-1个
10. \d 匹配数字[0-9]
11. \s 空白字符(包括\t\r\n\f\v)
12. \w 匹配字符,字母,数字,下划线
13. 上面三个如果是大写,就是反取,[]内使用^也是反取
14. .*? 用了你会爱上它
  • ^ $ |
s = '孙悟空找猪八戒找媳妇西高翠兰,然后吃西瓜,再吃西瓜'

# ^ 匹配开头的
res = re.findall('^孙悟空', s)
print(res) # $ 匹配结尾的
res = re.findall('$猪八戒', s)
print(res) # | 相当于or
res = re.findall('猪八戒|孙悟空', s)
print(res)
['孙悟空']
[]
['孙悟空', '猪八戒']
  • [] .
# [] 找到[]内任意一个元素的所有元素
s = 'abcdefgabckdjfkljsadalasjkdlfjklbkljklfjc'
res = re.findall('[a, b, c]', s)
print(res) # [^a-z]反取
#匹配出除字母外的字符,^元字符如果写到字符集里就是反取
a = re.findall("[^a-z]", "匹配s这s个字符串是否s匹配f规则re则") # 反取,匹配出除字母外的字符
print(a) # . 任意一个字符
s = '孙悟空找猪八戒找媳妇高翠兰,然后吃西瓜,再吃西瓜'
res= re.findall('媳妇...', s)
print(res)
['a', 'b', 'c', 'a', 'b', 'c', 'a', 'a', 'a', 'b', 'c']
['匹', '配', '这', '个', '字', '符', '串', '是', '否', '匹', '配', '规', '则', '则']
['媳妇高翠兰']
  • {} * + ?
# {3} 大括号前面的字符匹配三次
s = '孙悟空找猪八戒找媳妇妇妇妇高翠兰,然后吃西瓜,再吃西瓜'
res = re.findall('媳妇{3}', s)
print(res) # * 前面的字符匹配 0-无穷个
s = '孙悟空找猪八戒找媳高翠兰,然后吃西瓜,再吃西瓜'
res = re.findall('媳妇*',s)
print(res) # + 前面的字符匹配 1-无穷个
res = re.findall('媳妇+', s)
print(res) # ? 前面的字符匹配0-1个
s = '孙悟空找猪八戒找媳妇妇妇高翠兰,然后吃西瓜,再吃西瓜'
res = re.findall('媳妇?', s)
print(res)
['媳妇妇妇']
['媳']
[]
['媳妇']
  • \d \s \w
# \d 数字
# 符号可以连在一起使用
s = '孙悟空找猪八戒找媳妇妇妇高翠兰,然后asdfasdf吃西234234瓜,再吃 西瓜'
res = re.findall('\d+', s)
print(res) # \D
res = re.findall('\D*', s)
print(res)
['234234']
['孙悟空找猪八戒找媳妇妇妇高翠兰,然后asdfasdf吃西', '', '', '', '', '', '', '瓜,再吃 西瓜', '']
# \s 空
s = '孙悟空找猪八戒找媳妇妇妇高翠兰,,再吃 西瓜'
res = re.findall('\s+', s)
print(res) # \S 费控
res = re.findall('\S*', s)
print(res)
['   ']
['孙悟空找猪八戒找媳妇妇妇高翠兰,,再吃', '', '', '', '西瓜', '']
# \w 字符,字母,数字,下划线
s = '孙悟空找猪八戒找媳妇高$$$$$@@@@翠兰,然____后asddf吃西234234瓜'
res = re.findall('\w+', s)
print(res) # \W 非字符,字母,数字,下划线
res = re.findall('\W+', s)
print(res)
['孙悟空找猪八戒找媳妇高', '翠兰', '然____后asddf吃西234234瓜']
['$$$$$@@@@', ',']

终极

贪婪模式

  • 一直找
  • .* 代表所有的
s = '孙悟空找猪八戒找媳妇妇妇高$$$$$@@@@翠兰,然____后asdfasdf吃西234234瓜,再吃   西瓜妇'
# 从第一个猪找到最后一个妇去了
res = re.findall('猪.*妇', s)
print(res)
['猪八戒找媳妇妇妇高$$$$$@@@@翠兰,然____后asdfasdf吃西234234瓜,再吃   西瓜妇']

非贪婪模式

  • ?就是停止符,找到一个就停止
s = '孙悟空找猪八戒找媳妇妇妇高$$$$$@@@@翠兰,然____后asdfasdf吃西234234瓜,再吃   西瓜妇'
res = re.findall('猪.*?妇', s)
print(res)
['猪八戒找媳妇']

睡眠革命

re模块高级

comple

  • 写一个通用的规则模版
import re
s = '孙悟空找猪八戒找媳妇妇妇高$$$$$@@@@翠兰,然____后asdfasdf吃西234234瓜,再吃 西瓜妇'
res1 = re.compile('\d+')
res2 = re.compile('\w+')
res3 = re.compile('\s+') result1 = res1.findall(s)
result2 = res2.findall(s)
result3 = res3.findall(s)
print(result1)
print(result2)
print(result3) phone_compile = re.compile('1\d{10}')
email_compile = re.compile('\w+@\w+.\w+') test_s = '12345678900 nickchen121@163.com 22812373393@qq.com'
res_phone = phone_compile.findall(test_s)
print(res_phone) res_email = email_compile.findall(test_s)
print(res_email)
['234234']
['孙悟空找猪八戒找媳妇妇妇高', '翠兰', '然____后asdfasdf吃西234234瓜', '再吃', '西瓜妇']
[' ']
['12345678900']
['nickchen121@163.com', '22812373393@qq.com']

match和search

  • match和search的区别,match从开头开始匹配找一个,search搜索所有找第一个
s = '猪八戒找媳妇猪八戒'
# s = '孙悟空找媳妇猪八戒' # match会报错,除非不用group
match_res = re.match('猪八戒', s) # 从开头匹配,取一个
print(match_res.group()) search_res = re.search('猪八戒',s) # 搜索一个
print(search_res.group())
猪八戒
猪八戒

分组函数

?P<n1> # ?P<>定义组里匹配内容的key(键),<>里面写key名称,值就是匹配到的内容(只对正则函数返回对象时有用)

取出匹配对象方法

只对正则函数返回对象的有用

  • group() # 获取匹配到的所有结果,不管有没有分组将匹配到的全部拿出来,有参取匹配到的第几个如2
  • groups() # 获取模型中匹配到的分组结果,只拿出匹配到的字符串中分组部分的结果
  • groupdict() # 获取模型中匹配到的分组结果,只拿出匹配到的字符串中分组部分定义了key的组结果
origin = "hello world"
# 有两个分组定义了key
# 为何要有分组?提取匹配成功的指定内容(先匹配成功全部正则,再匹配成功的局部内容提取出来)
# ?P<>定义组里匹配内容的key(键),<>里面写key名称,值就是匹配到的内容
r = re.match("(?P<n1>h)(?P<n2>\w+)", origin)
print(r.group()) # 获取匹配到的所有结果,不管有没有分组将匹配到的全部拿出来
print(r.groups()) # 获取模型中匹配到的分组结果,只拿出匹配到的字符串中分组部分的结果
print(r.groupdict()) # 获取模型中匹配到的分组结果,只拿出匹配到的字符串中分组部分定义了key的组结果
hello
('h', 'ello')
{'n1': 'h', 'n2': 'ello'}

re.split()

  • 就是字符串的split方法,区别是可以使用正则表达式去替换
import re

s = '猪八戒的媳妇是1高翠兰,孙悟空的媳妇是2白骨精,唐僧的媳妇是3女儿国王,沙悟净没有媳妇(py9的学生们)'

print(s.split(','))
print('-'*50)
res = re.split('\d+',s)
print(res) s = '猪八戒的媳妇是a高翠兰,孙悟空的媳A妇是b白骨精,唐僧的B媳妇是z女儿国王,沙悟净没有媳妇(py9的学生们)'
print('-'*50)
print(s.split(','))
print('-'*50) res = re.split('[a-zA-Z]',s) # a,b,c,
print(res)
['猪八戒的媳妇是1高翠兰', '孙悟空的媳妇是2白骨精', '唐僧的媳妇是3女儿国王', '沙悟净没有媳妇(py9的学生们)']
--------------------------------------------------
['猪八戒的媳妇是', '高翠兰,孙悟空的媳妇是', '白骨精,唐僧的媳妇是', '女儿国王,沙悟净没有媳妇(py', '的学生们)']
--------------------------------------------------
['猪八戒的媳妇是a高翠兰', '孙悟空的媳A妇是b白骨精', '唐僧的B媳妇是z女儿国王', '沙悟净没有媳妇(py9的学生们)']
--------------------------------------------------
['猪八戒的媳妇是', '高翠兰,孙悟空的媳', '妇是', '白骨精,唐僧的', '媳妇是', '女儿国王,沙悟净没有媳妇(', '', '9的学生们)']

sub和subn

  • 都是用来替换内容,但是subn会计算替换的次数,类似于字符串的replace方法
s = '猪八戒的媳妇是1高翠兰,孙悟空的媳妇是2白骨精,唐僧的媳妇是3女儿国王,沙悟净6没有媳妇(py9的学生们)'

res = re.sub('\d', '', s)
print(res) print('-'*50) res = re.subn('\d', '', s)
print(res)
猪八戒的媳妇是高翠兰,孙悟空的媳妇是白骨精,唐僧的媳妇是女儿国王,沙悟净没有媳妇(py的学生们)
--------------------------------------------------
('猪八戒的媳妇是高翠兰,孙悟空的媳妇是白骨精,唐僧的媳妇是女儿国王,沙悟净没有媳妇(py的学生们)', 5)

分组

  • 需要的东西加括号就行了,括号外的东西不打印
import re

s = '猪八戒的媳妇是高翠兰,孙悟空的媳妇是白骨精,唐僧的媳妇是女儿国王,沙悟净没有媳妇(py9的学生们)'

res = re.findall('(.*?)的媳妇是(.*?)(,)',s)
print(res)
[('猪八戒', '高翠兰', ','), ('孙悟空', '白骨精', ','), ('唐僧', '女儿国王', ',')]

typing

day28 re(正则)模块的更多相关文章

  1. Python全栈开发【re正则模块】

    re正则模块 本节内容: 正则介绍 元字符及元字符集 元字符转义符 re模块下的常用方法 正则介绍(re) 正则表达式(或 RE)是一种小型的.高度专业化的编程语言. 在Python中,它内嵌在Pyt ...

  2. python_way day6 反射,正则 模块(进度条,hash)

    python_way day6 反射 正则 模块 sys,os,hashlib 一.模块: 1.sys & os: 我们在写项目的时候,经常遇到模块互相调用的情况,但是在不同的模块下我们通过什 ...

  3. 小白的Python之路 day5 re正则模块

    re正则模块 一.概述 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,要讲他的具体用法要讲一本书!它内嵌在Python中,并通过 re 模块实现.你可以为想要匹配的相应字符串 ...

  4. 认识python正则模块re

    python正则模块re python中re中内置匹配.搜索.替换方法见博客---python附录-re.py模块源码(含re官方文档链接) 正则的应用是处理一些字符串,phthon的博文python ...

  5. Python3中正则模块re.compile、re.match及re.search函数用法详解

    Python3中正则模块re.compile.re.match及re.search函数用法 re模块 re.compile.re.match. re.search 正则匹配的时候,第一个字符是 r,表 ...

  6. 008---re正则模块

    re正则模块 字符串的匹配规则 匹配模式 re.match() re.search() re.findall() re.split() re.sub() 元字符 print('------------ ...

  7. day22、模块-basedir、os、json模块、pickle和正则模块。

    四.正则. re模块: 作用:针对的对象:字符串, 课前引入: 例子一. s='dsdsadsadadsalexdsds's.find('alex') 如何找到字符串内部的alex;?过去学习可使用方 ...

  8. 21 re正则模块 垃圾回收机制

    垃圾回收机制 不能被程序访问到的数据,就称之为垃圾 引用计数 引用计数:用来记录值的内存地址被记录的次数的:当一个值的引用计数为0时,该值就会被系统的垃圾回收机制回收 每一次对值地址的引用都可以使该值 ...

  9. Python——正则模块

    1.re模块是用来操作正则表达式 2.正则表达式——用来字符串匹配的 (1)字符组:[字符组]  例如[0123fdsa456*/-] [0-9] 等同于[0123456789] [a-z] 匹配小写 ...

随机推荐

  1. 2018 noip 考前临死挣扎

    基础算法 倍增 贪心 分块 二分 三分 数据结构 线段树 对顶堆 数学 质数 约数 同余 组合 矩阵乘法 图论 二分图判定以及最大匹配 字符串 Tire树 KMP 最小表示法 Hash Manache ...

  2. Spring Cloud系列(三) 应用监控与管理Actuator

    Spring Cloud系列(二) 应用监控与管理Actuator 前言:要想使用Spring Cloud ,Spring Boot 提供的spring-boot-starter-actuator模块 ...

  3. LCS,LIS,LCIS

    网站:CSUST 8月3日(LCS,LIS,LCIS) LCS:      以下讲解来自:http://blog.csdn.net/yysdsyl/article/details/4226630 [问 ...

  4. LightOJ - 1231 - Coin Change (I)

    先上题目: 1231 - Coin Change (I)   PDF (English) Statistics Forum Time Limit: 1 second(s) Memory Limit:  ...

  5. EXTJS之DATA PROXY READER

    这是不依赖于STORE的读取.我测试了很久,原来在新版本的EXTJS里.modelmanager.getmodel之类的不用了. 更改为静态的LOAD办法. <!DOCTYPE html> ...

  6. Vijos——T 1092 全排列

    https://vijos.org/p/1092 描述 输入两个自然数m,n 1<=n<=20,1<=m<=n!输出n个数的第m种全排列. 如 :输入 3 1输出 1 2 3 ...

  7. xtrabackup增量备份mysql +MHA

    http://blog.csdn.net/yanggd1987/article/category/2214421 https://www.centos.bz/2013/09/innobackupex- ...

  8. IP地址的规划和设计方法(三)

    九,内部网络专用IP地址规划与网络地址转换NAT方法 (1)内部网络的专用IP地址选择的根据 RFC1918在讨论内部网络的专用IP地址规划方法时任务.使用专用地址规划一个内部网络地址系统时.首选的方 ...

  9. Python标准库:内置函数range(stop) range(start, stop[, step])

    本函数是产生一系列序列的数组,返回迭代子.參数stop是终止的数字:參数start是指明開始数列開始值:參数step是数列之间的差值. 因此这个函数就是产生以start为起点.以stop为终点,以st ...

  10. 检測wifi是否须要portal验证 公共场所wifi验证

    何为wifi portal验证? 平时在商场,咖啡厅,银行等公共场所.我们手机提示:有可用WLAN.这些WIFI能够直接连接,不须要password,但须要我们手动在手机网页上进行验证,通常是输入一个 ...