008---re正则模块
re正则模块
- 字符串的匹配规则
- 匹配模式
- re.match()
- re.search()
- re.findall()
- re.split()
- re.sub()
- 元字符
print('--------------匹配单个字符与数字--------------')
r'''
. 匹配除换行符以外的任意字符
[0-9] 匹配数组字符集合,表示括号内任意一个字符
[jiangwei] 匹配括号内任意一个字符
[a-z] 匹配任意小写字母
[A-Z] 匹配任意大写字母
[0-9a-zA-Z_]匹配任意数字,字母和下划线
[^sunck] 匹配除了sunck以外的所以字母,^表示脱字符,表示不匹配集合中的字符
[^0-9] 匹配所有的非数字字符
\d 匹配数字,效果[0-9]
\D 匹配非数字字符,效果[^0-9]
\w 匹配数字,字母下划线,效果[0-9a-zA-Z_]
\W 匹配非数字,字母下划线,效果[^0-9a-zA-Z_]
\s 匹配任意的空白符(空格,换行,换页,制表),效果[ \f\n\r\t]
\S 匹配任意的非空白符
'''
print(re.findall('\d','sunck is a22 go999od man111'))
print('--------------锚字符(边界字符)----------------')
'''
^ 行首匹配,和[]里的不是一个意思
$ 行尾匹配
\A 匹配字符串开始,它和^的区别是\A只匹配整个字符串的开头,即使在re.M模式下也不匹配到他行的行首
\Z 匹配字符串开始,它和$的区别是\A只匹配整个字符串的开头,即使在re.M模式下也不匹配到他行的行尾
\b 匹配一个单词的边界,也就是一个单词和空格间的位置
\B 匹配非单词边界
'''
print('-----------------匹配多个字符----------------')
'''
说明:下方的xyz均为假设的普通字符,n,m是非负整数,不是正则表达式的元字符
(xyz) 匹配小括号内的xyz(作为一个整体去匹配)
x? 匹配0个或者1个x
x* 匹配0个或者任意多个x(.*表示匹配0个或者任意多个字符,换行符除外)
x+ 匹配至少一个x
x{n} 匹配确定个数的n个x(n是一个非负整数)
x{n,m} 匹配至少n个最多m个x
x|y |表示或,匹配的是x or y
'''
print('-----------特殊----------')
'''
*? +? x? 最小匹配,通常都是尽可能多的匹配,可以使用这种带问号的解决贪婪匹配
(?:x) 类似(xyz),但不表示一个组
'''
- 三个常用方法
import re
'''
re.match()函数
功能:尝试从字符串的起始位置匹配,如果不是起始位置匹配成功,返回None
原型:match(patter,string,flags=0)
参数:pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式
re.I 忽略大小写
re.L 做本地户识别
re.M 多行匹配,影响`和$
re.S 是.匹配包括换行符在内的所有字符
re.U 根据unicode字符集解析字符,影响\w \W \b \B
re.X 使我们以更灵活的格式理解正则表达式
re.search()函数
功能:扫描整个字符串,并返回第一个成功的匹配
'''
# www.baidu.com
print(re.match('www','www.baidu.com'))
print(re.match('www','ww.baidu.com'))
print(re.match('www','wwW.baidu.com',re.I))
print(re.match('www','baidu.www.com'))
'''
re.search()函数
原型:match(patter,string,flags=0)
参数:pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式
功能:扫描整个字符串,并返回第一个匹配成功的
'''
print(re.search('sunck','good man is sunck!sunck is nice'))
'''
re.findall()函数
原型:match(patter,string,flags=0)
参数:pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式
功能:扫描整个字符串,并返回一个列表
'''
print(re.findall('sunck','good man is sunck!sunck is nice'))
- 其他方法
import re
'''
字符串切割
'''
str1="sunck is a good man"
print(str1.split(" "))
print(re.split(r" +",str1))
'''
字符串的替换和修改:sub(pattern, repl, string, count=0, flags=0)、subn
参数:
repl 指定用来替换的字符串
string 目标字符串
count 最多替换次数
功能:在目标字符串中,以正则表达式的规则,匹配字符串,再替换。
区别:前者返回一个,后者是被替换的次数被替换的字符串,后者返回一个元祖,前者是被替换的字符串。
'''
str3='sunck is a good good good man'
print(re.sub(r"(good)","nice",str3,count=2)) # type string
print(re.subn(r"(good)","nice",str3,count=2)) # type tuple
'''
分组
概念:除了简单的判断之外,正则表达式还有提取子串的功能。用()表示的就是就是提取分组
'''
str4='010-53247654'
m=re.match(r"((?P<first>\d{3})-(?P<last>\d{8}))",str4)
# 使用序号获取对应组的信息,group(0)表示原始字符串
print(m.group(0))
print(m.group(1))
print(m.group("first"))
print(m.group(3))
print(m.groups())
'''
编译:当我们使用正则表达式时,re模块会做两件事
1、编译正则表达式,如果正则表达式本身不合法,会报错
2、用编译后的正则表达式去匹配对象
'''
# 之前使用
pat=r"1(([3587])\d|(47))\d{8}$"
print(re.match(pat,"13006293101"))
# 编译成对象使用
re_telephon = re.compile(pat)
print(type(re_telephon))
print(re_telephon.match("13600000000"))
008---re正则模块的更多相关文章
- Python全栈开发【re正则模块】
re正则模块 本节内容: 正则介绍 元字符及元字符集 元字符转义符 re模块下的常用方法 正则介绍(re) 正则表达式(或 RE)是一种小型的.高度专业化的编程语言. 在Python中,它内嵌在Pyt ...
- python_way day6 反射,正则 模块(进度条,hash)
python_way day6 反射 正则 模块 sys,os,hashlib 一.模块: 1.sys & os: 我们在写项目的时候,经常遇到模块互相调用的情况,但是在不同的模块下我们通过什 ...
- 小白的Python之路 day5 re正则模块
re正则模块 一.概述 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,要讲他的具体用法要讲一本书!它内嵌在Python中,并通过 re 模块实现.你可以为想要匹配的相应字符串 ...
- 认识python正则模块re
python正则模块re python中re中内置匹配.搜索.替换方法见博客---python附录-re.py模块源码(含re官方文档链接) 正则的应用是处理一些字符串,phthon的博文python ...
- Python3中正则模块re.compile、re.match及re.search函数用法详解
Python3中正则模块re.compile.re.match及re.search函数用法 re模块 re.compile.re.match. re.search 正则匹配的时候,第一个字符是 r,表 ...
- day22、模块-basedir、os、json模块、pickle和正则模块。
四.正则. re模块: 作用:针对的对象:字符串, 课前引入: 例子一. s='dsdsadsadadsalexdsds's.find('alex') 如何找到字符串内部的alex;?过去学习可使用方 ...
- 21 re正则模块 垃圾回收机制
垃圾回收机制 不能被程序访问到的数据,就称之为垃圾 引用计数 引用计数:用来记录值的内存地址被记录的次数的:当一个值的引用计数为0时,该值就会被系统的垃圾回收机制回收 每一次对值地址的引用都可以使该值 ...
- Python——正则模块
1.re模块是用来操作正则表达式 2.正则表达式——用来字符串匹配的 (1)字符组:[字符组] 例如[0123fdsa456*/-] [0-9] 等同于[0123456789] [a-z] 匹配小写 ...
- Go语言正则模块
基本使用 import "bytes" import "fmt" import "regexp" func main() { //这个测试一 ...
随机推荐
- C# 生成随机数重复问题
今天做测试,在一个循环里面给实体属性赋随机值,然后生成一个实体集合,突然发现生成的实体集合中的所有实体相应属性值都是一样的,调试时却又发现值并不是重复的,度娘以后发现了问题——Random类是一个产生 ...
- 获取v$latch数据源实验
实验环境:Oracle Rac 11.2.0.3 首先获取v$latch的定义:通过PL/SQL或者get ddl等常规途径只能获取到v_$latch相关的视图信息.需要通过特殊方法获取v$latch ...
- March 1 2017 Week 9 Wednesday
If you are serious giving up something, giving up is not serious at all. 如果你慎重地决定要放弃,那么放弃本身就没什么大不了的. ...
- Inner Join, Left Outer Join和Association的区别
测试用的CDS视图的源代码,第8行用Inner Join连接TJ02T, 后者存放了所有系统状态的ID和描述. Inner Join测试结果:对于那些在TJ02T里没有维护描述信息的状态,它们不会出现 ...
- 《机器学习实战》中贝叶斯分类中导入RSS源例子
跟着书中代码往下写在这里卡住了,考虑到可能还会有其他同学也遇到了这样的问题,记下来分享. 先吐槽一下,相信大部分网友在这里卡住的主要原因是伟大的GFW,所以无论是软件FQ还是肉身FQ的小伙伴们估计是无 ...
- Android(java)学习笔记41:Map集合功能概述
1. 下面通过代码引入Map集合: 如下 package cn.itcast_01; import java.util.HashMap; import java.util.Map; /* * 作为学生 ...
- HDU 6214 最小割边
双倍经验题:HDU 6214,3987 求最小割的最小边. 方案一: 首先跑最大流,这个时候割上都满载了,于是将满载的边 cap = 1,其他 inf ,再跑最大流,这个时候限定这个网络的关键边就是那 ...
- POJ 1632 Vase collection【状态压缩+搜索】
题目传送门:http://poj.org/problem?id=1632 Vase collection Time Limit: 1000MS Memory Limit: 10000K Total ...
- L1 loss L2 loss
https://www.letslearnai.com/2018/03/10/what-are-l1-and-l2-loss-functions.html http://rishy.github.io ...
- 【luogu P3369 普通平衡树(Treap/SBT)】 模板 Splay
题目链接:https://www.luogu.org/problemnew/show/P3369 #include <cstdio> #include <algorithm> ...