# 1. 正则表达式
# 元字符
# . 除了换行符外任意字符
# \w 数字 字母 下划线
# \s 空白符
# \b 单词的末尾
# \d 数字
# \W 除了数字 字母 下划线
# \D 除了数字
# \S 除了空白符
# ^ 开头
# $ 结尾
# [] 匹配字符组中的字符
# [^] 除了字符组内的元素外

# 量词 限定符
# * {0,n} 零或者更多
# + {1,n} 一或更多
# ? {0,1} 零或一
# {p} p次
# {p,}   p次或更多次
# {p,q} 从p到q次
# .*   贪婪匹配 尽可能多的匹配到结果
# .+ # .*? 惰性匹配 是尽可能的少匹配.
# 分组 正则中使⽤()进⾏分组. 如.匹配⼀个相对复杂的⾝份证号
# ^[1-9]\d{14}(\d{2}[0-9x])?$
# ^([1-9]\d{16}[0-9x]|[1-9]\d{14})$
# 转义
# 正则表达式中,有很多有特殊意义的是元字符,如\n和\s等,若要在正则中匹配正常的"\n"⽽不是"换⾏符"需要对"\"进⾏转义, 变成'\\'.
# 而在python中,都是字符串的形式出现,字符串中\也有特殊的含义,本身还需转义.所以匹配⼀次"\n",字符串中要写成'\\n',那么正则就要写成"\\\\n",
# 这样太麻烦.所以这时用r'\n'这个概念,此时的正则是r'\\n'就可以了.
# 如 r"www\.(baidu|google)\.com","www.google.com"
# \n 换行
# \\n \n
# \.
# \/
# \?
# 2. re模块
# findall() 获取到匹配的所有内容
# finditer() 匹配到所有内容。 返回迭代器
# search() 搜索。查到了就返回
# match() 匹配. 从头开始匹配
 # r"(?P<name>正则)"

 import re
res = re.search('e','leiyunse') # 搜索 搜到 一个 结果就返回
print(res.group()) # e res = re.match('\w+','wuwu is not good man') # match 从开头匹配 若匹配到了就返回
print(res.group()) # wuwu lst = re.findall('\w+','wusir and exo') # findall 查找所有 返回list
print(lst) # ['wusir', 'and', 'exo'] it = re.finditer("\w+","mai le fo leng") # 返回迭代器
for el in it:
print(el.group())
'''
mai
le
fo
leng
''' # 分组优先级
lst = re.findall(r"www\.(baidu|google)\.com","www.google.com") # ()最优先返回
print(lst) # ['google'] # (?:) 去掉优先级
lst = re.findall(r"www\.(?:baidu|google)\.com","www.google.com")
print(lst) # ['www.google.com'] # split 切割 若加括号()会保留切的
lst = re.split("([ab])","alex is not a sb,no he is a big sb")
print(lst) # sub 替换
res = re.sub(r"\d+","_sb_","alex111wusir222taibai666ritian999")
print(res) # alex_sb_wusir_sb_taibai_sb_ritian_sb_ # subn 替换 返回元组 带替换次数
res = re.subn(r"\d+","_sb_","alex111wusir222taibai666ritian999")
print(res) # re.compile() # 把正则表达式预加载
obj = re.compile(r"alex\d+and")
res = obj.search("alex222andwusir333taibai666ritian999")
print(res.group()) # alex222and
# 若数字单独拿出来
obj = re.compile(r"alex(?P<name>\d+)and")
res = obj.search("alex222andwusir333taibai666ritian999")
print(res.group()) # alex222and
print(res.group("name")) #





第二十三天- 模块 re的更多相关文章

  1. 《Linux命令行与shell脚本编程大全》 第二十三章 学习笔记

    第二十三章:使用数据库 MySQL数据库 MySQL客户端界面 mysql命令行参数 参数 描述 -A 禁用自动重新生成哈希表 -b 禁用 出错后的beep声 -B 不使用历史文件 -C 压缩客户端和 ...

  2. NeHe OpenGL教程 第二十三课:球面映射

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  3. javaSE第二十三天

    第二十三天    338 1.进程和线程的概述    338 2.多线程(理解)    339 (1)多线程:一个应用程序有多条执行路径    339 (2)Java程序的运行原理及JVM的启动是多线 ...

  4. Python开发【第二十三篇】:持续更新中...

    Python开发[第二十三篇]:持续更新中...

  5. Python第二十二天 stat模块 os.chmod方法 os.stat方法 pwd grp模块

    Python第二十二天   stat模块  os.chmod方法  os.stat方法  pwd  grp模块 stat模块描述了os.stat(filename)返回的文件属性列表中各值的意义,根据 ...

  6. Gradle 1.12用户指南翻译——第二十三章. Java 插件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  7. “全栈2019”Java多线程第二十三章:活锁(Livelock)详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  8. “全栈2019”Java第二十三章:流程控制语句中决策语句switch上篇

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  9. 孤荷凌寒自学python第二十三天python类的封装

    孤荷凌寒自学python第二十三天python类的封装 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 一.从怎么样访问类的内部代码块中定义的私有属性说起 类中定义的私有属性和私有方法是无法被 ...

随机推荐

  1. 【JavaScript】 js立即执行函数

    ( function(){…} )()和( function (){…} () )是两种javascript立即执行函数的常见写法,一般理解是一个括号包裹匿名函数,再在后面加个括号调用函数,最后达到函 ...

  2. Vue 部署单页应用,刷新页面 404/502 报错

    在 Vue 项目中,可以选择 hash或者 history.pushState() 实现路由跳转.如果在路由中使用history模式: export default new Router({ mode ...

  3. iOS-消除CocoaPods内容警告

    前言 2018年2月26日 农历正月十一 星期一 今天就想更新下博客,内容不多,心情复杂: 突然想吟诗一首: 其实,我是一个善良的人: 其实,我是一枚... 算了,还是说正事吧 消除CocoaPods ...

  4. 面试题:js如何渲染十万条数据并不卡住界面

    这道题考察了如何在不卡住页面的情况下渲染数据,也就是说不能一次性将几万条都渲染出来,而应该一次渲染部分 DOM,那么就可以通过 requestAnimationFrame 来每 16 ms 刷新一次. ...

  5. C语言 for循环次数

    for (i = 0;i < n;i++) 则循环次数是N,而循环结束以后,i的值是n.循环的控制变量i,是选择从0开始还是从1开始,是判断i<n 还是i <= n,对循环的次数,循 ...

  6. 剑指offer六十一之序列化二叉树(待补充)

    一.题目 请实现两个函数,分别用来序列化和反序列化二叉树二.思路 三.代码 --------------------------------------------- 参考链接:

  7. Java之Socket网络编程实践

    转自:http://my.oschina.net/leejun2005/blog/104955#comments 一.TCP/IP协议 既然是网络编程,涉及几个系统之间的交互,那么首先要考虑的是如何准 ...

  8. 对称(DES/AES)与非对称(RSA/SSL/数字证书)加密介绍及实际应用

    本文不对具体的算法做深入研究,只是讲解各种安全算法的原理和使用场景. 一.数据校验算法 数据校验,是为保护数据的完整性,用一种指定的算法对原始数据计算出的一个校验值.当接收方用同样的算法再算一次校验值 ...

  9. Java之IO(十一)BufferedReader和BufferedWriter

    转载请注明源出处:http://www.cnblogs.com/lighten/p/7074488.html 1.前言 按照字节流的顺序一样,字符流也提供了缓冲字符流,与字节流不同,Java虽然提供了 ...

  10. C/C++ -- Gui编程 -- Qt库的使用 -- 对话框QDialog

    模态对话框 -----源文件main.cpp(工程QtDialog)----- #include "qtdialog.h" #include <QApplication> ...