正则表达式(re模块)是一种小型的,高度专业化的编程语言。(在python中)它内嵌在python中,并通过re模块实现。正则表达式模块被编译成一系列字节码,然后由用c编写的匹配引擎执行。

正则就是处理字符串的。

1.普通字符:字符串本身的方法。比如字符串的 find(), split().

2. 元字符:   .^$*+?{}[]|()\

import re
s = "hellopythonworldpydsonds"
print(re.findall("py..on", s)); # .通配符,可以表示任意字符(\n除外)s = "pythonhelloworldpydsonds"
print(re.findall("^py..on", s)); # ^ 被模糊匹配的字符串必须在字符串的开头位置s = "pythonhelloworlddspydson"
print(re.findall("py..on$", s)); # $ 被模糊匹配的字符串必须在字符串的末尾位置s = "pythonheguannnlddspydson"
print(re.findall("guan*", s)); # * 匹配0至无穷次的字符, guan*表示匹配 gua, guan, guann, guannn...(n可以是0个, 0到无穷个,贪婪匹配(尽可能匹配))s = "pythonheguannnlddspydson"
print(re.findall("guan+", s)); # + 匹配1至无穷次的字符, guan+表示匹配 guan, guann, guannn...(n至少1个, 1到无穷个,贪婪匹配(尽可能匹配))s = "pythonhegualddspydson"
print(re.findall("guan*", s)); # * 匹配0至无穷次的字符, guan*表示匹配 gua, guan, guann, guannn...(n可以是0个, 0到无穷个,贪婪匹配(尽可能匹配))s = "pythonhegualddspydson"
print(re.findall("guan+", s)); # + 匹配1至无穷次的字符, guan+表示匹配 guan, guann, guannn...(n至少1个, 1到无穷个,贪婪匹配(尽可能匹配))s = "pythonhegualddspydson"
print(re.findall("guan?", s)); # ? 匹配0或1个字符, guan?表示只能匹配 gua, guan(只能匹配0个n,或1个n的字符,贪婪匹配(尽可能匹配))# {0,}==*,  {1,}==+, {0,1}==?, 用{}可以表示,*,+,?的效果
# 当然{}中可以是任意数字  {0,6}表示可以匹配0-6个字符, {6}表示只能匹配6个字符
s = "pythonheguannlddspydson"
print(re.findall("guan{6}", s)); # {6}表示只能匹配6个字符s = "pythonheguannlddspydson"
print(re.findall("guan{0,6}", s)); # {0,6}表示可以匹配0-6个字符s = "pythonheguannnlddspydson"
print(re.findall("guan*?", s)); # 加?,实现惰性匹配(只匹配最少的)s = "pythonheguannnlddspydson"
print(re.findall("guan+?", s)); # 加?,实现惰性匹配(只匹配最少的)s = "pythonheguannnlddspydson"
print(re.findall("guan??", s)); # 加?(第一个?表示元字符,实现模糊匹配,第2个?表示惰性匹配),实现惰性匹配(只匹配最少的)
 [] 表示字符集, 在字符集里有功能的符号: -(范围) ^(非)  \(转义)反斜杠后边跟元字符去除特殊功能,比如\.反斜杠后边跟普通字符实现特殊功能,比如\d\d 可以匹配任何十进制数,相当于[0-9]
\D 可以匹配任何非数字字符,相当于[^0-9]
\s 可以匹配任何空白字符,相当于[\t\n\r\f\v]
\S 可以匹配任何非空白字符,相当于[^\t\n\r\f\v]
\w 匹配任何字母数字字符,相当于[a-zA-Z0-9]
\W 匹配任何非字母数字字符,相当于[^a-zA-Z0-9]
\b 匹配一个特殊字符边界,比如空格, &, #等
s = "pythonheguanfnlddspydson"
print(re.findall("guan[a-z]", s)); # - [a-z],表示字母a到z之间的所有字母s = "pythonheguan7nnlddspydson"
print(re.findall("guan[^a-z]", s)); # ^表示非, [^a-z],表示不是字母a到z之间的其他字符s = "1-90+((888*4)/2-5)"
print(re.findall("\d+",s))print(re.findall("\D+",s))s = "hello  world python!"
print(re.findall("\s+",s))s = "hello  world python!"
print(re.findall("\S+",s))s = "hello  wor%ld PYT*Hon! 43&52"
print(re.findall("\w+",s))s = "hello  wor%ld PYT*Hon! 43&52&43^87"
print(re.findall("\W+",s))s = "hello6world"
print(re.findall("hello\.world",s)) # "hello\.world"只能匹配"hello.world"

s = "hello I# I$ world LIST"
print(re.findall("I\\b", s)) # \b在ascii码中本身就有特殊含义,如果写成re.findall("I\b", s),那么最终传给re模块的就是转换过的字符而不是\bs = "hello I\crld LIST"
print(re.findall("I\\\\c", s))# python解释器会转移一次,变成 "I\\c", 然后re模块再转移一次,变成"I\c"

分组 "()"

s = "defabdefabdef"
print(re.findall("(def)+", s))s = "liubei22guanyu21zhangfei20zhaoyun"
print(re.search("(?P<name>[a-z]+)\d+", s).group()) # search()只匹配第一个符合条件的
print(re.search("(?P<name>[a-z]+)(?P<age>\d+)", s).group("name")) # (?P<名称>)为分组起名称
print(re.search("(?P<name>[a-z]+)(?P<age>\d+)", s).group("age")) # (?P<名称>)为分组起名称s = "567abcdfd545"
print(re.match("\d+", s).group()) # 同search, 不过只在字符串开始处进行匹配print(re.split("[ |]", s)) # 分割 ['567', 'abcdf', 'd54', '5']print(re.sub("\d+","a","12345deffun767ction98")) # 替换
print(re.subn("\d","a","12345deffun767ction98")) # 替换it = re.finditer("\d+","124abd456def789uio")  #返回一个迭代器
print(it.__next__().group())
print(it.__next__().group())print(re.findall("www\.(baidu|souhu)\.com", "rtewww.baidu.comrete")) # 优先获取()匹配的内容, ['baidu']print(re.findall("www\.(?:baidu|souhu)\.com", "rtewww.baidu.comrete")) # ?:去掉()的优先级

python三十八:re模块相关推荐

  1. python三十九:logging模块

    import logginglogging.basicConfig(level=logging.DEBUG # 设置日志级别, 默认为 WARNING,filename="logger.lo ...

  2. python三十六:shelve模块

    shelve模块比pickle模块简单,只有一个open函数,返回类似字典的对象,可读可写.key必须为字符串,而值可以是python所支持的数据类型. import shelvef = shelve ...

  3. python三十二:os模块

    os模块是与操作系统交互的一个模块. import os print(os.getcwd()) # 获取当前工具目录,即当前python脚本工作的目录路径 os.chdir("test&qu ...

  4. python三十五:pickle模块

    pickle和json的用法是一样的.但 pick序列化后的数据是字节,不是字符串.所以pickle可以序列化函数,对象等. import pickledic = {"name": ...

  5. python三十四:json模块

    import jsondic = {"name":"guanyu","age":18} lt = ["abc",'def ...

  6. Python编程基础:第三十六节 模块Modules

    第三十六节 模块Modules 前言 实践 前言 我们目前所有的代码都写在一个文档里面.如果你的项目比较大,那么把所有功能写在一个文件里就非常不便于后期维护.为了提高我们代码的可读性,降低后期维护的成 ...

  7. [Python从零到壹] 三十八.图像处理基础篇之图像几何变换(平移缩放旋转)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  8. Django笔记三十八之发送邮件

    这一篇笔记介绍如何在 Django 中发送邮件. 在 Python 中,提供了 smtplib 的邮件模块,而 Django 在这个基础上对其进行了封装,我们可以通过 django.core.mail ...

  9. 左耳听风 第三十八周

    左耳听风 第三十八周 每周完成一个ARTS: 每周至少做一个 leetcode 的算法题.阅读并点评至少一篇英文技术文章.学习至少一个技术技巧.分享一篇有观点和思考的技术文章.(也就是 Algorit ...

最新文章

  1. 如何使用AWS和Azure的配置存储服务保存读取配置
  2. git怎样用idea拉代码_一款强大的 IDEA 代码生成器,学会用,真香!
  3. 手机安装(Fiddler)证书
  4. 《分布式系统:概念与设计》一1.3 分布式系统的趋势
  5. CCNA-第四篇-OSI模型-下
  6. 服务器安装系统教程进光盘界面,iso光盘系统怎么安装系统教程
  7. think php getfield,thinkPHP数据查询常用方法总结【select,find,getField,query】
  8. axure 画小程序效果图_微信小程序-基于canvas画画涂鸦
  9. mysql触发器报错_mysql触发器实例:莫名其妙的错误?
  10. 如何安装老版本Eclipse汉化——以2020-06为例
  11. cad查看_天正电气CAD教程之标注实例讲解
  12. 再谈量子计算与通讯的基本原理
  13. 网盘上传文件服务器失败原因,win7系统在百度网盘上传文件一直失败的解决方法...
  14. 期权学习之常见收益结构
  15. 按键精灵定义全局变量_按键精灵2014全局数组变量传递(支持静态与动态)V2
  16. python------帮助小学生练习10以内的加法
  17. 卸载应用后,删除安装根目录下的所有文件,提示已在另一进程打开,在资源管理器进程中找不到该程序的解决
  18. IllegalArgumentException 介绍
  19. Hi3798 openSSH的移植
  20. Uinapp中js修改css变量,【前端技术】uniapp操作dom,改变css样式

热门文章

  1. Maven生成可以直接运行的jar包的多种方式
  2. Python字符串基本操作
  3. js中iframe访问父页的方法
  4. iOS开发UI篇--UIScrollView思维导图[不断更新]
  5. SQL 创建索引的作用以及如何创建索引
  6. 【译】SQL Server误区30日谈-Day7-一个实例多个镜像和日志传送延迟
  7. a href=#与 a href=javascript:void(0) 的区别 打开新窗口链接的几种办法
  8. 【干货】移动APP安全测试要点解析
  9. 考试题string——线段树。
  10. 28. extjs中Ext.BLANK_IMAGE_URL的作用