print("#")
import re
#
s = "哈哈2"
res = re.search("[0-9]",s)
print(res)
#查询到匹配内容所在的区间 span()
print(res.span())
#查询到的匹配的内容  group()
print(res.group())

<_sre.SRE_Match object; span=(2, 3), match='2'>
(2, 3)
2
()

s = "哈哈3uS3k42"#匹配两位,第一位是0-9,第二位是a-z,
#但是re.search比较偷懒,只要匹配到了一个,就不再继续向后匹配了
#因此这里使用re.search()只匹配到了3u, 没有匹配后面的3k
res = re.search("[0-9][a-z]",s)
print(res)
<_sre.SRE_Match object; span=(2, 4), match='3u'>
s = "哈哈3uS3k4k2p3e"
#re.findall()找到一个后,会继续向后面会找, 匹配整个字符串
res = re.findall("[a-z][0-9][a-z]", s)
print(res)

['k4k', 'p3e']

msg = "a32rwfa3e5tv35d44"#在[0-9]后面有个+, 表示前面的[0-9]整个模式要匹配1次或者多次
#也就是说可以出现1个数字,也可以出现多个数字(1个及其以上)
res = re.findall("[a-z][0-9]+[a-z]", msg)
print(res)

['a32r', 'a3e', 'v35d']

#验证qq号码 在5-11位数, 开头不能为0
qq = "12332232"
#正则表达式中,^表示从开头匹配,$表示匹配到结尾
res =  re.match("^[1-9][0-9]{4,10}$",qq)
print(res)

<_sre.SRE_Match object; span=(0, 8), match='12332232'>

#正则表达式 起名的方式
#起名的方式      (?P<名字>正则表达式)   (?P=名字)
msg = "<html><h1>abc</h1></html>"#这里<>是指定的字符串, 起的名字是 (?P<name1>w+) (?P=name1) ,
#其中w+表示匹配任意的数字,字母,下划线,+表示匹配1次或者多次#(.+) , 其中小括号()表示一个整体, .在正则表达式中表示除了回车的任意字符,+表示匹配一次或多次
res = re.match(r"<(?P<name1>w+)><(?P<name2>w+)>(.+)</(?P=name2)></(?P=name1)>", msg)
print(res)

<_sre.SRE_Match object; span=(0, 25), match='<html><h1>abc</h1></html>'>

#正则表达式 起名的方式
#起名的方式      (?P<名字>正则表达式)   (?P=名字)
msg = "<html><h1>abc</h1></html>"#(.+) , 其中小括号()表示一个整体, .在正则表达式中表示除了回车的任意字符,+表示匹配一次或多次
res = re.match(r"<(?P<name1>w+)><(?P<name2>w+)>(.+)</(?P=name2)></(?P=name1)>", msg)
print(res)
#一个()就是一个组,  (?P<name>正则)表示给这个()分组起了个名字,叫做name
print(res.group())
print(res.group(1))
print(res.group(2))
print(res.group(3))

<_sre.SRE_Match object; span=(0, 25), match='<html><h1>abc</h1></html>'>
<html><h1>abc</h1></html>
html
h1
abc

#分组:() ----> result.group(1)获取组中匹配的内容msg = "<html><h1>abc</h1></html>"
res = re.match(r"<[0-9a-zA-Z]+>(.+)<[0-9a-zA-Z]+>", msg)
print(res)
print(res.group(1))

None
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-44-0a967eba82b9> in <module>()
4 res = re.match(r"<[0-9a-zA-Z]+>(.+)<[0-9a-zA-Z]+>", msg)
5 print(res)
----> 6 print(res.group(1))
AttributeError: 'NoneType' object has no attribute 'group'

#引用分组匹配内容:
#1. number, number 引用第number组的数据。 例如1,2msg = "<html><h1>abc</h1></html>"res = re.match(r"<([0-9a-zA-Z]+)><([0-9a-zA-Z]+)>(.+)</2></1>$", msg)print(res)#2. ?P<name>正则  ?P=name
msg = "<html><h1>abc</h1></html>"
res = re.match(r"<([0-9a-zA-Z]+)><([0-9a-zA-Z]+)>(.+)</2></1>$", msg)
print(res)
print(res.group())
print(res.group(1))
print(res.group(2))
print(res.group(3))
print(res.group(4))

<_sre.SRE_Match object; span=(0, 25), match='<html><h1>abc</h1></html>'>
<html><h1>abc</h1></html>
html
h1
abc
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-49-6ed676991b0a> in <module>()
6 print(res.group(2))
7 print(res.group(3))
----> 8 print(res.group(4))
IndexError: no such group

#只要有小括号就有分组, 就可以用result.group(number)
# 正则表达式模块rere.match() 从头开始匹配re.search() 比较懒惰,搜索到一个就不往下继续搜索了re.findall() 比较勤奋, 会搜寻所有匹配的正则字符re.sub()  替换 #re.sub(正则表达式,"新内容",要处理的string)re.split(正则,string) 切分字符串
#re.sub(正则表达式,"新内容",要处理的string)
# 将strings中所有的数字替换成90
res = re.sub(r"d+","90","java:99, python:100")
print(res)
java:90, python:90
#利用正则,将查询到的数值增加1
#可以看到在re.sub()的第二个参数位置,就是替换为新的字符串的位置,
#使用了一个函数名称, re.sub()给函数func传递的参数就是匹配到的结果
def func(temp):print(temp,type(temp))re.sub(r"d+",func,"java:92, python:98")

<_sre.SRE_Match object; span=(5, 7), match='92'> <class '_sre.SRE_Match'>
<_sre.SRE_Match object; span=(16, 18), match='98'> <class '_sre.SRE_Match'>
'java:, python:'

#利用正则,将查询到的数值增加1
def func(temp):#print(temp,type(temp))print(temp.group())num = temp.group()num = int(num)+1#返回的时候需要以字符串的形式返回return str(num)#这里的第二个参数位置是用函数名, 表示匹配到str中的数字后把数字+1
re.sub(r"d+",func,"java:92, python:98")

92
98
'java:93, python:99'

#正则表达式切割字符串, re.split(正则, string)#遇到逗号或者冒号,就分割一下, 再把分割的结果保存到res的列表中
res = re.split(r"[,:]","java:99,python:98")
print(res, type(res), len(res))

['java', '99', 'python', '98'] <class 'list'> 4

#正则匹配不是 4,7结尾的手机号码, 一共11位
phone = "15054510441"
res = re.match("1d{9}[0-35-689]",phone)
print(res)
<_sre.SRE_Match object; span=(0, 11), match='15054510441'>
#匹配座机号码, 类似010-10541414  , -前面有3或者4位,-后面有8位
phone = "010-45404104"
#res = re.match("(d{3,4})-(d{8})", phone)# (|) 分组中的|表示或者的关系,表示这个分组中更可以有两个选择
res = re.match("(d{3}|d{4})-(d{8})", phone)
print(res)
<_sre.SRE_Match object; span=(0, 12), match='010-45404104'>
#匹配座机号码, 类似010-10541414  , -前面有3或者4位,-后面有8位
phone = "010-45404104"
# (|) 分组中的|表示或者的关系,表示这个分组中更可以有两个选择
res = re.match("(d{3}|d{4})-(d{8})", phone)
print(res)
print(res.group())#一个括号就表示一组, 一共有两个括号,所以有两组
#group(1)表示第一组中的内容
#group(2)表示第二组中的内容
print(res.group(1))
print(res.group(2))

<_sre.SRE_Match object; span=(0, 12), match='010-45404104'>
010-45404104
010
45404104

msg = "<html>abd</html>"
#正则中,.表示匹配处理n之外的任何字符
#正则中, 在""里面, ^表示从头开始匹配,$表示匹配到结尾
res = re.match(r"<w+>(.+)</w+>$", msg)
print(res)
print(res.group())
print(res.group(1))

<_sre.SRE_Match object; span=(0, 16), match='<html>abd</html>'>
<html>abd</html>
abd

msg = "<html>abd</html>"#1表示引用第一个括号中的内容, 结合数字达到前后的引用
res = re.match(r"<(w+)>(.+)(</1>)$", msg)
print(res)

<_sre.SRE_Match object; span=(0, 16), match='<html>abd</html>'>

#总结
正则表达式
re模块
import rere.match(pattern, str) #从头开始匹配
re.search(pattern, str) #比较懒惰,只要匹配到了第一个,后面就不在搜索了
re.findall(pattern, str) #查询所有匹配到的字符
re.sub(pattern,"新的内容,也可以是函数", str) #替换
re.split(pattern , str)  #---->[] 表示返回一个列表
#正则表达式的基础
. 任意字符,除了n
[]  范围
|   或者
()  一组量词:
* >= 0
+ >= 1
? 0或1
{m}  匹配m次
{m,n} 匹配m到n次,>=m , <=n
{m,}  匹配大于等于m次, >=m
#正则中的预定义转义字符
s  space
S  not spaced  digit
D  not digitw  word
W  not word#https://www.cnblogs.com/beiyi888/p/10281141.html
b  边界
B  not 边界分组:
() --->  group(1)number:(w+)(d*)  ----> group(1) group(2)引用:(w+)(d*) 1 2 表示引用前面的内容name:(?P<name1>正则)  (?P=name1)
#python中的量词默认是贪婪的
量词就是 * + ?
在量词* + ? {m,n}后面添加?,使贪婪变成非贪婪
非贪婪模式 *?  +?  ??#贪婪模式:能继续匹配就继续往后匹配,直至无法匹配
#非贪婪模式: 只要匹配到了一个,就立马停止,不再继续往后匹配了
#贪婪模式举例:
msg = "avc123adbv"
res = re.match(r"avc(d+)", msg)
print(res)

<_sre.SRE_Match object; span=(0, 6), match='avc123'>

#非贪婪模式举例:
msg = "avc123adbv"
res = re.match(r"avc(d+?)", msg)
print(res)

<_sre.SRE_Match object; span=(0, 4), match='avc1'>

#非贪婪模式举例:
msg = "avc123adbv"
res = re.match(r"avc(d+?)", msg)
print(res)

<_sre.SRE_Match object; span=(0, 4), match='avc1'>

path = '<img class = "Image" src="https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=1913214116,3912663704&fm=26&gp=0.jpg">"'
#正则匹配, 非贪婪模式
res = re.match(r'<img class = "Image" src="(.*?)">', path)
print(res)
img_path = res.group(1)
print(img_path)import requests
response = requests.get(img_path)
print(response.text) #是文本字符串文件
print("_------------")
print(response.content)  #是非文本的二进制文件# “wb”是write binary, 以二进制模式创建文件,
#将返回的二进制文件,以“wb”的形式写入本地, 就是一张图片with open("aa.jpg", "wb") as f_w:f_w.write(response.content)

<_sre.SRE_Match object; span=(0, 122), match='<img class = "Image" src="https://ss0.bdstatic.co>https://ss0.bdstatic.com/70cFvHSh_Q1YnxGkpoWK1HF6hhy/it/u=1913214116,3912663704&fm=26&gp=0.jpg

python 多次匹配_Python学习记录14相关推荐

  1. python小括号报错_Python学习记录:括号配对检测问题

    Python学习记录:括号配对检测问题 一.问题描述 在练习Python程序题的时候,我遇到了括号配对检测问题. 问题描述:提示用户输入一行字符串,其中可能包括小括号 (),请检查小括号是否配对正确, ...

  2. python做实时温度曲线图_Python学习记录 - matplotlib绘制温度变化折线图

    Python学习记录 - matplotlib绘制温度变化折线图 Python学习记录 - matplotlib绘制温度变化折线图 题目:列表a表示10点到12点每一分钟的气温,累计为2个小时,绘制折 ...

  3. python定义变量字符串_Python学习笔记二(变量和字符串)

    2017年年终确定的从2018年开始学习一门新的语言.随着机器学习人工智能的日渐深入,是时候有必要掌握以下Python了.博客今天更新第二篇学习记录,关于Python的变量和变量中字符串的使用,所有学 ...

  4. python从入门到_Python学习路线从入门到上手,如何快速Python学习?

    因为清晰易读的风格,广泛的适用性,Python已经成为最受欢迎的编程语言之一.在TIOBE 排行榜中位居第四,是名副其实的人工智能第一语言. 风靡的另一个原因是,Python有非常多的第三方库.比如用 ...

  5. 用python画糖葫芦_python学习记录四

    切片 取一个list或者tuole得部分元素都是非常常见得操作 比如说一个list如下: >>> L = ['Michael','Sarah','Tracy','Bob','Jack ...

  6. python增量赋值是什么_python学习记录20190122_增量赋值

    python中的增量赋值 一,在python中a=a+b和a+=b有区别吗 **1,对可变的数据类型 a=[1,2,3] print(id(a)) #1602469350792 b=[4,5] a=a ...

  7. python socket编程_Python学习记录-socket编程

    1. OSI七层模型详解 2. Python socket 什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答 ...

  8. 用python画糖葫芦_python学习记录六

    返回函数 def calc_sum(*args): ax=0for n inargs: ax= ax +nreturn ax def lazy_sum(*args): def sum(): ax = ...

  9. python糖葫芦_python学习记录二

    list python内置的一种数据类型是列表:list  是一种有序的集合 比如  classmates = ['a','b','c',] classmates[-1] = 'c'//倒数第一个这样 ...

最新文章

  1. React组件设计之边界划分原则
  2. 高并发下缓存与数据库双写不一致解决方案
  3. 数位屏如何去光标_iPad还是数位板屏?我该选哪个?
  4. JVM详解之:java class文件的密码本
  5. JDBC中Statement与PreparedStatement的区别
  6. matchers依赖_定制Hamcrest Matchers
  7. 脚本实现oracle服务启停,通用服务启停shell脚本
  8. (进阶篇)Redis6.2.0 集群 主从复制_搭建_01
  9. UIWebView / NSURL / NSBoundle 相关应用 (实例,加载完成前的背景, 默认safari打开链接地址等)...
  10. 智能会议系统(10)---WebRtc在H5视频聊天
  11. [转]JAVA自动装箱和拆箱
  12. crtmpserver 在VS2010下的build
  13. unity 相机(物体)自动前移,单击屏幕后退
  14. VC++ 各个版本(2005 2008 2010 2012 2013 2015 2017)的运行库下载
  15. 指纹采集器测试软件,售完存档:小熊做的关于奔凯BIOCOME USB指纹采集器 指纹识别仪TCR4 Win7 Win8 Win10下的使用教程...
  16. 从抓取豆瓣电影聊高性能爬虫思路(纯干货)
  17. 华为手机超保值,苹果都比不过,国人对它的爱外人无法理解
  18. android 编译libjpeg-turbo
  19. Python tell 和 seek用法
  20. ?php get_sidebar(); ?,常用函数-get_sidebar()

热门文章

  1. jsp中给div加背景_web前端入门到实战:详解css3如何给背景图片加颜色遮罩
  2. okhttp框架学习
  3. php 回收png,关于php:从其他Png中减去Png,保留透明度,ImageMagick
  4. 基于JAVA+Servlet+JSP+MYSQL的在线购物系统
  5. 计算机网络DNS域名配置,如何设置计算机的IP地址和DNS域名服务器
  6. 计算机基础知识PDF文档,计算机基础知识(范文).pdf
  7. [luogu2286][HNOI2004]宠物收养场【平衡树】
  8. 1.RABBITMQ 入门 - WINDOWS - 获取,安装,配置
  9. PureFTP安装配置
  10. Devexpress - office - 效果