python 正则表达式

正则表达式本身是一种小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配。正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行。

用法

match()

re.match()尝试从字符串的其实位置匹配一个模式匹配失败返回none
语法:re.match(pattern,string,flags=00)
pattern 匹配的正则表达式
string 要匹配的字符串
flags 标志位,控制正则表达式的匹配方式

  1. 1 import re
  2. 2 #在起始位置匹配
  3. 3 print(re.match('www','www.baidu.com').span())
  4. 4 #不再起始位匹配
  5. 5 print(re.match('com','www.baidu.com'))

group(num=0)匹配整个表达式的字符串
groups() 返回一个包含所有小组字符串的元组

  1. 1 #!/usr/bin/python
  2. 2 import re
  3. 3 line = "Cats are smarter than dogs"
  4. 4 matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
  5. 5 if matchObj:
  6. 6 print "matchObj.group() : ", matchObj.group()
  7. 7 print "matchObj.group(1) : ", matchObj.group(1)
  8. 8 print "matchObj.group(2) : ", matchObj.group(2)
  9. 9 else:
  10. 10 print "No match!!

re.search()

re.search()方法扫描整个字符串并返回第一个成功的匹配
函数语法:re.search(pattern,string,flags=0)
剩下和上面的re.match用法一致

re.match与re.search的区别
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。

compile()
compile()编译正则表达式模式,返回一个对象模式
格式:re.compile(pattern,flags=0)
pattern:一个字符串形式的正则表达式
flags:可选
re.I 忽略大小写
re.L 表示特殊字符集 \w, \W, \b, \B, \s, \S 依赖于当前环境
re.M 多行模式
re.S 即为 . 并且包括换行符在内的任意字符(. 不包括换行符)
re.U 表示特殊字符集 \w, \W, \b, \B, \d, \D, \s, \S 依赖于 Unicode 字符属性数据库
re.X 为了增加可读性,忽略空格和 # 后面的注释

  1. 1 import re
  2. 2 tt = "Tina is a good girl, she is cool, clever, and so on..."
  3. 3 rr = re.compile(r'\w*oo\w*')
  4. 4 print(rr.findall(tt)) #查找所有包含'oo'的单词
  5. 5 执行结果如下:
  6. 6 ['good', 'cool']

findall()
re.findall遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表。
格式:re.findall(pattern, string, flags=0)
eg:

  1. 1 import re
  2. 2 p = re.compile(r'\d+')
  3. 3 print(p.findall('xiaohua2020jintian1yue9ri'))
  4. 4
  5. 5 #执行结果:['2020', '1', '9']

finditer()
搜索string,返回一个顺序访问每一个匹配结果(Match对象)的迭代器。

split()
按照能够匹配的字串将string分割后返回列表
格式:re.split(pattern,string[,maxsplit])
eg:

  1. 1 #按照/d+来匹配分割
  2. 2 import re
  3. 3 print(re.split('\d+','xiaohuadawang123huahua2020 niubi'))
  4. 4 #代码执行结果:['xiaohuadawang', 'huahua', ' niubi']

sub()
使用re替换string中每一个匹配的子串后返回替换后的字符串
re.sub(pattern,repl,string,count)
eg:

  1. 1 #\s+匹配 空格部分替换成-
  2. 2 import re
  3. 3 text="xiaohuadawang from yulinxueyuan xinxianquanxiehui"
  4. 4 print(re.sub(r'\s+','-',text))
  5. 5 #代码执行结果:
  6. 6 #xiaohuadawang-from-yulinxueyuan-xinxianquanxiehui

subn()
返回替换次数
格式:subn(pattern, repl, string, count=0, flags=0)

正则表达式对象
start()返回匹配开始的位置
end返回匹配结束的位置
span()返回一个元组包含匹配(开始,结束)的位置

简单应用

  1. import requests
  2. import re
  3.  
  4. url='http://jandan.net/pic/MjAyMDAxMjAtMTM4#comments'
  5. headers={}
  6.  
  7. r=requests.get(url=url)
  8.  
  9. imgs=re.findall('<img src="(.*?)" /></p>',r.content)
  10.  
  11. print(imgs)
  12. for img in imgs:
  13. print(img)

参考学习:
https://www.cnblogs.com/tina-python/p/5508402.html
https://www.runoob.com/python/python-reg-expressions.html

python-网络安全编程第三天(正则表达式)的更多相关文章

  1. 【1】python核心编程 第三章

    1.继续( \ ) 有两种例外情况一个语句不使用反斜线也可以跨行.在使用闭合操作符时,单一语句可以跨多行,例如:在含有小括号.中括号.花括号时可以多行书写.另外就是三引号包括下的字符串也可以跨行书写 ...

  2. python核心编程-第三章-个人笔记

    1.语句和语法 (1)反斜杠"\"表示语句继续.python良好的编程习惯是一行最后不超过80个字符,一行字符过多时便须用到反斜杠换行继续该语句. PS:在使用小括号.中括号.大括 ...

  3. Python核心编程第三版第二章学习笔记

    第二章 网络编程 1.学习笔记 2.课后习题 答案是按照自己理解和查阅资料来的,不保证正确性.如由错误欢迎指出,谢谢 1. 套接字:A network socket is an endpoint of ...

  4. python核心编程-第三章-习题

    1.这是python的语言特性,python先创建对象,在给变量赋值时,不需要定义变量的名称和类型,它实际是用变量引用对象.变量类型在给变量赋值时自动声明 2.原因类似变量无须声明类型 3.pytho ...

  5. Python面向对象编程(三)

    封装 1.为什么要封装? 封装就是要把数据属性和方法的具体实现细节隐藏起来,只提供一个接口.封装可以不用关心对象是如何构建的 2.封装包括数据的封装和函数的封装,数据的封装是为了保护隐私,函数的封装是 ...

  6. python网络编程【三】(网络服务器)

    建立一个服务器需要以下4步: 1.建立socket对象. 2.设置socket选项(可选的) 3.绑定到一个端口(同样,也可以是一个指定的网卡). 4.侦听连接. 下面代码片段可以实现这些功能: ho ...

  7. python 网络编程(三)---TCP 服务器端客户端实现

    客户端 客户端主要有4个步骤: 1)创建一个socket以连接服务器. socket = socket.socket(family, type),family参数代表地址家族,可为AF_INET(包括 ...

  8. python 网络编程第三版

    为服务端增加多线程解决方案 1.服务端代码如下: ***这个版本并没有真正的起到多线程的作用,主要原因在于t.join():以后的版本会改进这个问题*** #!/usr/bin/python #!co ...

  9. 第十一章:Python の 网络编程基础(三)

    本課主題 多线程的创建和使用 消息队列的介绍 Python 操作 memached 和 redis 实战 本周作业 消息队列的介绍 对列是在内存中创建的,如果整个进程里的程序运行完毕之后会被清空,消息 ...

  10. 刷Python核心编程第三版的习题时遇到一个findall的坑

    在用正则表达式做以下查找时,发现re.findall()对于正则表达式有没有圆括号是有区分的,具体如下 line = 'Tue Sep 18 12:48:21 2029::ilziuv@zcntzir ...

随机推荐

  1. HashMap的理解

    Hashmap的实现原理 默认它是存放了16个链表头的数组,存储数据的时候key先生成hashcode,根据hashcode把数据存放到相应链表中,那么是如何确定存放到哪个链表中的呢?采用hashco ...

  2. Spring Boot与多数据源那点事儿~

    持续原创输出,点击上方蓝字关注我 目录 前言 写这篇文章的目的 什么是多数据源? 何时用到多数据源? 整合单一的数据源 整合Mybatis 多数据源如何整合? 什么是动态数据源? 数据源切换如何保证线 ...

  3. Django (学习第一部 基础操作)

    django 1 django 文件相关信息 2 Python创建django 3 命令行创建django 4 Django 必会三板斧 5 静态文件配置 6 request对象方法 7 pychar ...

  4. 【踩坑系列】使用long类型处理金额,科学计数法导致金额转大写异常

    1. 踩坑经历 上周,一个用户反馈他创建的某个销售单无法打开,但其余销售单都可以正常打开,当时查看了生产环境的ERROR日志,发现抛了这样的异常:java.lang.NumberFormatExcep ...

  5. origin添加两个Y轴

    1. 选中X和两个Y 2. 点击Double Y 3. 关掉gap to Symbol,否则Line+Symbol这种显示方式可能显示不出线条 ​

  6. 数据结构(C++)——顺序表

    顺序表和链表的比较 1.存取方式 顺序表可以随机访问,而链表只能从表头顺序查找.(因此经常查找顺序表某一个元素时,顺序表更适合) 2.逻辑结构与物理结构 顺序表中,逻辑上相邻的元素,其物理存储位置也相 ...

  7. vue-main.js中new vue()的解析

    在main.js中,代码如下 import Vue from 'vue' import App from './App.vue' new Vue({ router, render: h => h ...

  8. 这么设置Intellij IDEA,据说效率还不错~

    显示工具条 (1)效果图 (2)设置方法 标注1:View–>Toolbar 标注2:View–>Tool Buttons 设置鼠标悬浮提示 (1)效果图 (2)设置方法File–> ...

  9. python实现银行系统模拟程序

    银行系统模拟程序 关注公众号"轻松学编程"了解更多. 1.概述 ​ 使用面向对象思想模拟一个简单的银行系统,具备的功能:管理员登录/注销.用户开户.登录.找回密码.挂失.改密.查询 ...

  10. Efficient Estimation of Word Representations in Vector Space 论文笔记

    Mikolov T , Chen K , Corrado G , et al. Efficient Estimation of Word Representations in Vector Space ...