# 2.正则

# 方法:findall | match | split | sub
# a = 10
# print(a.__hash__())
# def fn():
# pass
# print(fn.__name__)
# import json
# print(json.dumps([1,2,3]))
import re

# 全文匹配,返回值是列表
res = re.findall('\d*?', 'd1') # ['', '', ''] | ['', '', '1', '']
print(res)

# 非贪婪匹配的引用场景: 一般都要结合特定的开头与结尾
res = re.findall('<.*>', '<a>abc</a>')
print(res) # ['<a>abc</a>']
res = re.findall('<.*?>', '<a>abc</a>')
print(res) # ['<a>', '</a>']
res = re.findall('\w*?>', '<a>abc</a>')
print(res) # ['a>', 'a>']

# 分组:通过分组加(),拿到匹配到的结果中的指定信息
res = re.findall('((\w*?)>)', '<a>abc</a>')
print(res) # [('a>', 'a'), ('a>', 'a')]

# 操作分组的方法
# (?P<name>...): 有名分组
# 返回值是match匹配的结果对象,可以.group(组序号|组名)来取具体组的信息
res = re.match('(\d{3})(?P<center>\d{3})(\d{3})', '123456789')
print(res.group('center'))

# 传入一个有正则语法的普通字符串,得到一个可以调用正则方法的正则字符串
r = re.compile('(\w*?)>')
print(r.findall('<a>abc</a>'))

# res = re.findall('<([a-z]{1,3})>(\w*?)</[a-z]{1,3}>', '<a>abc</a><b>123</b>')
# print(res) # [('a', 'abc'), ('b', '123')]

res = re.sub('(\d{3})(?P<center>\d{3})(\d{3})', r'\2\1\3', '<123456789>')
print(res)

#

[0-9]  #匹配数字0~9
[a-z]  #匹配小写字母
[A-Z]  #匹配大写字母
\d | \D #匹配数字 | 非数字
\w| \W       #匹配字母数字下划线 | 非字母数字下划线
\s | \S      #匹配不可见字符:\n \t 空格等 | 可见字符
\b:边界匹配, 按空格结束匹配  需要用r将正则转义,不然得不到想要的结果
.

a|b == [ab]
[^msg]: msg的对立面

*
+
?

*?
+?
??
'''
import re
print(re.findall(r'a[a-z]*\b', 'a ab c abc def ab'))
print(re.findall(r'[^ab]', ' aab c abc def ab'))

# 身份证:18位
# 200000200808081111
# [1-7][0-9]{5}
# (?:19[0-9]{2}|20[01][0-9]): 1900 - 2019
# (?:0[1-9]|1[0-2]): 01-12
# (?:0[1-9]|[12][0-9]|3[01]) : 01-31
# [0-9]{3}
# [0-9Xx]
# [1-7][0-9]{5}(?:19[0-9]{2}|20[01][0-9])(?:0[1-9]|1[0-2])(?:0[1-9]|[12][0-9]|3[01])[0-9]{3}[0-9Xx]

# 邮箱
# 30000000@qq.com
# [a-zA-Z0-9]\w{,15}@[176|178|192]\.[com|com\.cn|cn]

# 获取百度首页图片地址
import requests
responds = requests.get('https://www.baidu.com/')
# print(responds.text)
content = responds.text
# www.baidu.com/img/gs.gif
content += 'http://www.baidu.com/wimg/gs.gif'
# res_list = re.findall('www[^w]*?(?:gif|png)', content)
res_list = re.findall('www.{1,30}(?:gif|png)', content)
# print(len(res_list))
print(res_list)

day正则表达式补充的更多相关文章

  1. Python开发【第一篇】Python基础之正则表达式补充

    正则表达式 一简介:就其本质而言,正则表达式(或RE)是一种小型的.高度专业化的标称语言,(在Python中)它内嵌在Python中,并通过re模块实现.正则表达式模式被编译成一系列的字节码,然后由用 ...

  2. javascript 正则表达式补充

    定义 JavaScript种正则表达式有两种定义方式,定义一个匹配类似 <%XXX%> 的字符串 1. 构造函数 var reg=new RegExp('<%[^%>]+%&g ...

  3. JavaScript正则表达式补充

    定义正则表达式 /.../用于定义正则表达式 /.../g表示全局匹配 /.../i表示不区分大小写 /.../m表示多行匹配 JS正则匹配时本身就是支持多行,此处多行匹配只是影响正则表达式^和$,m ...

  4. python正则表达式补充

    import re origin= "hello alex bcd alex 1ge alex acd 19" r=re.match("(?P<n1>h)(? ...

  5. Python:Day19 正则表达式补充

    贪婪匹配 贪婪匹配是指字符后面是*+?的时候,都是尽可能多的匹配,如果不想尽可能多的匹配,那么在这三个字符后面加?号即可,这样变成惰性匹配,按最少匹配. ret = re.findall('ab??' ...

  6. HTML(六)——表单验证、正则表达式、事件

    1.表单验证<form></form> (1).非空验证(去空格) (2).对比验证(跟一个值对比) (3).范围验证(根据一个范围进行判断) (4).固定格式验证:电话号码, ...

  7. form表单验证和事件、正则表达式

    1.表单验证<form></form> (1).非空验证(去空格) (2).对比验证(跟一个值对比) (3).范围验证(根据一个范围进行判断) (4).固定格式验证:电话号码, ...

  8. 2016年11月6日--form表单验证和事件、正则表达式

    1.表单验证<form></form> (1).非空验证(去空格) (2).对比验证(跟一个值对比) (3).范围验证(根据一个范围进行判断) (4).固定格式验证:电话号码, ...

  9. 2016/2/25 1、<表单验证<form></form> 2、正则表达式 3、事件

    1.<表单验证<form></form> (1).非空验证(去空格) (2).对比验证(跟一个值对比) (3).范围验证(根据一个范围进行判断) (4).固定格式验证:电 ...

随机推荐

  1. 使用正则替换script及其内容

    因做微信公众号文章保存,发现他的js大多数也用不着,所以就想着用正则替换掉源代码中的js片段 正则代码: <script(?:[^<]++|<(?!/script>))*+&l ...

  2. React 基础入门

    React 起源于 Facebook 内部项目,是一个用来构建用户界面的 Javascript 库,相当于MVC架构中的V层框架,与市面上其他框架不同的是,React 把每一个组件当成了一个状态机,组 ...

  3. .NET Core 给使用.NET的公司所带来的机遇

    今晚在余晟的微信公众号看到了一篇文章< 从.NET/C#开发的“后继无人”说起: https://mp.weixin.qq.com/s/rO2d0xZ58Z2syqT7AaNT3w>. 这 ...

  4. CopyOnWriteArrayList源码解析

    Java并发包提供了很多线程安全的集合,有了他们的存在,使得我们在多线程开发下,可以和单线程一样去编写代码,大大简化了多线程开发的难度,但是如果不知道其中的原理,可能会引发意想不到的问题,所以知道其中 ...

  5. Identity Server 4 预备知识 -- OAuth 2.0 简介

    OAuth 2.0 简介 OAuth有一些定义: OAuth 2.0是一个委托协议, 它可以让那些控制资源的人允许某个应用以代表他们来访问他们控制的资源, 注意是代表这些人, 而不是假冒或模仿这些人. ...

  6. 支持向量机(SVM)之数学公式详细推导

    一.概述 1.含义: 支持向量机(support vector machine,SVM)是一种二类分类器,它的基本模型是定义在特征空间上的间隔最大化的线性分类器,通过引入核函数,也可以作为非线性分类器 ...

  7. Mybatis之旅第四篇-输入输出映射

    一.引言 在日常开发用到mybatis时,因为实际的开发业务场景很复杂,不论是输入的查询条件,还是返回的结果,经常是需要根据业务来定制,这个时候我们就需要自己来定义一些输入和输出映射 二.parame ...

  8. 【Netty】(6) ---源码ServerBootstrap

    [Netty]6 ---源码ServerBootstrap 之前写了两篇与Bootstrap相关的文章,一篇是ServerBootstrap的父类,一篇是客户端Bootstrap类,博客地址: [Ne ...

  9. 2.5配置的框架浅析「深入浅出ASP.NET Core系列」

    希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,谢谢关注. 配置的使用流程 //第一步.初始化Builder var builder = new ConfigurationB ...

  10. Spring Boot连接MySQL数据库

    上篇 只需两步!Eclipse+Maven快速构建第一个Spring Boot项目 已经构建了一个Spring Boot项目,本文在此基础上进行连接MySQL数据库的操作. 1. pom.xml添加依 ...