Python自学之路---Day13
Python自学之路---Day13
常用的三个方法
1.re.match(pattern, string, flags=0)
2.re.search(pattern, string, flags=0)
3.re.findall(pattern, string, flags=0)
原型 | re.match(pattern, string, flags=0) |
---|---|
参数 | pattern:匹配的正则表达式 string :要匹配的字符串 flags :标志位,用于控制正则表达式的匹配方式 |
功能 | 1.尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成果也会返回None 2.扫描整个字符串,并返回第一个匹配成功的字符串 3.扫描整个字符串,并返回所有匹配成果的结果列表 |
flags参数说明:
re.I | 忽略大小写 |
---|---|
re.L | 做本地化识别 |
re.M | 多行匹配,影响^和$ |
re.S | 使.匹配包括换行符在内的所有字符 |
re.U | 根据Unicode字符集解析字符,影响\w \W \b \B |
re.X | 使我们以更灵活的格式理解正则表达式 |
# re.match()
str1 = "www.baidu.com"
print(re.match("www", str1))
print(re.match("baidu", str1))
# 输出
<re.Match object; span=(0, 3), match='www'>
None
# re.search()
str1 = "www.baidu.com"
print(re.search("www", str1))
print(re.search("baidu", str1))
# 输出
<re.Match object; span=(0, 3), match='www'>
<re.Match object; span=(4, 9), match='baidu'>
# re.findall()
str1 = "www.baidu.com, www.baidu.com"
print(re.findall("www", str1))
print(re.findall("baidu", str1))
# 输出
['www', 'www']
['baidu', 'baidu']
匹配单个字符
. | 匹配除换行符以外的任意字符 |
---|---|
[a, b , c] | 匹配 ‘a’ 或 ‘b’ 或 ‘c’ |
[^…] | 匹配不在[ ]内的字符, 如[ ^abc]表示匹配除了’a’ ,‘b’, ‘c’ 这个三个字符以外的任意一个字符 |
[…-…] | 匹配[从-到]的内容,如[1-9] 表示匹配数字1到9 |
\ | 反斜杠后面跟 元字符 去除 元字符的特殊功能,反斜杠后面跟 普通字符 实现 特殊功能 |
\d | 匹配所有数字,类似[0-9] |
\D | 匹配非数字字符 |
\w | 匹配数字,字母和下划线,类似[0-9a-zA-Z_] |
\W | 匹配非数字,字母和下划线,类似[ ^0-9a-zA-Z_] |
\s | 匹配任意的空白符(空格,换行,换页,制表,回车),类似[ \f\n\r\t] |
\S | 匹配任意的非空白符(空格,换行,换页,制表,回车),类似[^ \f\n\r\t] |
print(re.findall("goo.", "good man dool man goom"))
print(re.findall("[abc]", "www.baidu.com"))
print(re.findall("[^abc]", "www.baidu.com"))
print(re.findall("[0-9]", "25se26d1s5e"))
print(re.findall("[0123456789]", "25se26d1s5e"))
print(re.findall("\d", "25se26**d1s5e"))
print(re.findall("\D", "25se26**d1s5e"))
print(re.findall("\w", "25se26**d1s5e"))
print(re.findall("\W", "25se26**d1s5e"))
#输出
['good', 'goom']
['b', 'a', 'c']
['w', 'w', 'w', '.', 'i', 'd', 'u', '.', 'o', 'm']
['2', '5', '2', '6', '1', '5']
['2', '5', '2', '6', '1', '5']
['2', '5', '2', '6', '1', '5']
['s', 'e', 'd', 's', 'e']
['2', '5', 's', 'e', '2', '6', 'd', '1', 's', '5', 'e']
['*', '*']
边界匹配
^ | 匹配字符串的开头,与[ ]里的^不是一个意思 |
---|---|
$ | 匹配字符串的结尾 |
\A | 匹配字符串开头,和^的区别是它只匹配整个字符串的开头,即使在re.M模式下也不会匹配其他行的行首 |
\Z | 匹配字符串结尾,和$的区别是它只匹配整个字符串的结尾,即使在re.M模式下也不会匹配其他行的结尾 |
\b | 匹配\w作为边界的内容 |
\B | 匹配非\w与\W之间的内容 |
print(re.search("^www", "www.baidu.com")) # ^
print(re.search("^www", "w.baidu.com"))
print(re.search("com$", "www.baidu.com")) # $
print(re.search("com$", "www.baidu.comm"))
print(re.search("ww\w", "www.baidu.com")) # \b
print(re.search("www\w", "www.baidu.com"))
print(re.search("www\W", "www.baidu.com")) # \B
print(re.search("www.\W", "www.baidu.com"))
# 输出
<re.Match object; span=(0, 3), match='www'>
None
<re.Match object; span=(10, 13), match='com'>
None
<re.Match object; span=(0, 3), match='www'>
None
<re.Match object; span=(0, 4), match='www.'>
None
数量匹配
* | 匹配前一个字符0次或无限次(贪婪) |
---|---|
+ | 匹配前一个字符1次或无限次(贪婪) |
? | 匹配前一个字符0次或1次(非贪婪) |
{m} | 匹配前一个字符m次 |
{m,n} | 匹配前一个字符m至n次。m,n可以省略,若省略m,则匹配0至n次;若省略n则匹配m至无限次(贪婪) |
*?+?{m,n}? | 可以使使其变为非贪婪匹配 |
print(re.findall("a*", "abaaa")) # *
print(re.findall("a+", "abaaa")) # +
print(re.findall("a?", "abaaa")) # ?
print(re.search("a{2}", "abaaa")) # {m}
print(re.search("a{2,4}", "abaaa")) # {m,n}
print(re.search("a{2,4}?", "abaaa")) # {m,n}?
# 输出
['a', '', 'aaa', '']
['a', 'aaa']
['a', '', 'a', 'a', 'a', '']
<re.Match object; span=(2, 4), match='aa'>
<re.Match object; span=(2, 5), match='aaa'>
<re.Match object; span=(2, 4), match='aa'>
逻辑与分组
| | 匹配左右表达式的任意一个,如果|没有被包括在()内,则它的范围是整个表达式 |
---|---|
(...) | 被括起来的表达式将作为一个分组,从表达式左边开始每遇到一个左括号,编号+1.分组表达式作为一个整体,后面可以接数量词。表达式中的|仅在该组中有效 |
(?P...) | 指定组的别名 |
print(re.search("www.baidu.com|WWW.BAIDU.COM", "www.baidu.com")) # |
print(re.search("www.baidu.com|WWW.BAIDU.COM", "WWW.BAIDU.COM"))
print(re.search("(w|W)ww.baidu.com", "www.baidu.com")) # ()
print(re.search("(w|W)ww.baidu.com", "Www.baidu.com"))
m = re.match(r"(?P<first>(\d{3})-(?P<last>\d{8}))", "010-52347654") # (?P<name>)
print(m.group(0)) # 使用序号获取对应组的信息,group(0)代表原始字符串
print(m.group(1))
print(m.group(2))
print(m.group("first"))
print(m.groups()) # 查看匹配的各组的情况
# 输出
<re.Match object; span=(0, 13), match='www.baidu.com'>
<re.Match object; span=(0, 13), match='WWW.BAIDU.COM'>
<re.Match object; span=(0, 13), match='www.baidu.com'>
<re.Match object; span=(0, 13), match='Www.baidu.com'>
010-52347654
010-52347654
010
010-52347654
('010-52347654', '010', '52347654')
编译正则表达式
编译:当使用正则表达式时,re模块会干两件事
1.编译正则表达式,如果正则表达式本身不合法会报错
2.用编译后的正则表达式去匹配对象
编译成正则对象,在调用是就会省去原来的正则表达式参数
pat = r"^1(([3578]\d)|(47))\d{8}$" # 正则表达式
print(re.match(pat, "13600000000"))
re_telephone = re.compile(pat) # 编译
print(re_telephone.match("13600000000"))
# 输出
<re.Match object; span=(0, 11), match='13600000000'>
<re.Match object; span=(0, 11), match='13600000000'>
其他方法
re.split(pattern, string, maxsplit=0, flags=0)
该方法作用类似于字符串的split()方法,但是由于加入了正则表达式,所以更好用,更精确
str1 = "sunck is a good man"
print(str1.split(" "))
print(re.split(r" +", str1))
# 输出
['sunck', '', '', '', '', '', '', '', '', 'is', 'a', 'good', 'man']
['sunck', 'is', 'a', 'good', 'man']
re.sub(pattern, repl, string, count=0, flags=0)
re.subn(pattern, repl, string, count=0, flags=0)
功能:在目标字符串中以正则表达式的规则匹配字符串,同时把他们替换成指定的字符串,默认替换次数为替换所有
区别:前者返回一个修改后的字符串,后者返回一个元组(修改后的字符串, 被替换的次数)
str3 = "www.baidu.com, www.sina.com, www.rnake.com"
print(re.sub(r"www", "ppp", str3))
print(type(re.sub(r"www", "ppp", str3)))
print(re.subn(r"www", "ppp", str3))
print(type(re.subn(r"www", "ppp", str3)))
# 输出
ppp.baidu.com, ppp.sina.com, ppp.rnake.com
<class 'str'>
('ppp.baidu.com, ppp.sina.com, ppp.rnake.com', 3)
<class 'tuple'>
Python自学之路---Day13的更多相关文章
- Python自学之路---Day01
目录 Python自学之路---Day01 注释 单行注释 多行注释 print()函数 语法 参数 实例 input()函数 语法 参数 实例 查看Python的关键字 代码 变量与常量 变量 如何 ...
- Python自学之路
2020年春节,受新型冠状病毒影响,整个春节假期,全国人民都在恐慌之中,为了避免大家上班相互传染,公司号召国家政策,开始上班日期延迟,在家呆的实在太无聊,突然感觉自己不能浪费这美好的时光,决定学习Py ...
- 我的Python自学之路-003 字符串的知识
'''字符串是以引号或者单引号括起来的任意文本,例如"123","asdfjk",'adfa'引号或者单引号,只是一种表示方法,并不是字符串的一部分如果字符串本 ...
- python 自学之路-Day Two
Day1补充部分 模块初识 模块就是由其他人写好的功能,在程序需要的时候进行导入,直接使用,也叫库. 库有标准库和第三方库,所谓标准库,就是不需要安装就可以直接使用的,自带的:第三方库,就是需要进行下 ...
- python 自学之路-Day one
一.Python介绍 创始人吉多范罗苏姆(龟叔),脚本解释程序 应用领域广,数据分析.组件集成.网络服务.图像处理.数值计算和科学计算等. 主要应用领域: 云计算:OpenStack: WEB开发:经 ...
- Python自学之路——自定义简单装饰器
看了微信公众号推送的一道面试题,发现了闭包的问题,学习时间短,从来没有遇到过这种问题,研究一下. Python函数作用域 global:全局作用域 local:函数内部作用域 enclosing:函数 ...
- ql的python学习之路-day13
前言:本节主要学习模块 一.模块的定义 模块:本质是.py结尾的python文件(文件名:test.py,对应的模块是:test),用来从逻辑上组织python代码(变量.函数.类.逻辑,本质是实现一 ...
- 我的Python自学之路-002 字典的知识
'''字典是python中唯一的验证类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算.根据计算的结果决定value的存储地址.所以字典是无序存储的.且key必 ...
- 我的Python自学之路-001 列表的知识
#_date_:2020/9/11 '''列表和字典是python中用的最多的数据类型 假如要存储一个班级的人名,需要怎么做?有这么几种方法:1.定义很多个变量: name0 = 'wucaho' n ...
随机推荐
- R 创建一个空的数据框
k = 16 #数据框的行数 z = data.frame( a = numeric(k), b = numeric(k), c = numeric(k), d = numeric(k) )
- java实现下划线转驼峰
废话少说,直接上代码 import java.util.regex.Matcher; import java.util.regex.Pattern; public class Temp { publi ...
- vDom和domDiff
虚拟dom和domDiff 1. 构建虚拟DOM var tree = el('div', {'id': 'container'}, [ el('h1', {style: 'color: blue'} ...
- git commit -m 和 git commit -am 区别
git commit -m 和 git commit -am 通常修改一个文件 并且将文件提交到本地分支的命令是: git add . git commit -m 'update' 以上两个命令其实可 ...
- Golang的标识符命名规则
Golang的标识符命名规则 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.关键字 1>.Go语言有25个关键字 Go语言的25个关键字如下所示: break,defau ...
- 小程序封装API
一般我们https请求都是通过wx.request来请求,但是这种请求如果多了,页面会混乱不说,还不好管理,因此我将请求单独拎出去,方便管理,也方便后期维护. // api.js const API_ ...
- MySql索引原理分析
面试 问:数据库中最常见的慢查询优化方式是什么? 同学A:加索引. 问:为什么加索引能优化慢查询?同学A:...不知道同学B:因为索引其实就是一种优化查询的数据结构,比如Mysql中的索引是用B+树实 ...
- 3-Java逻辑控制语句
目录 Java选择结构 Java循环结构 return.break.continue Math.random()的使用和条件运算符 1.Java选择结构 1.1.if(布尔表达式)单选结构 - 当布尔 ...
- 用 Python 编写一个天气查询应用 pyqt5
效果预览: ! 一.获取天气信息 使用python获取天气有两种方式. 1)是通过爬虫的方式获取天气预报网站的HTML页面,然后使用xpath或者bs4解析HTML界面的内容. 2)另一种 ...
- Elasticsearch Query DSL(查询语言)
章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...