Python之re正则
1. 基本规则
# 元字符:
# . ^ $ * + ? { } [ ] | ( ) \ # 字符类型匹配:
# . 表示匹配任意一个字符(换行符除外)
# [asdf] 表示匹配中括号里面的任意一个字母一次
# [a-z] 表示匹配a-z中的任意一个字母 [0-9] 表示匹配0-9中的任意一个数字
# [^0-9] 中括号中有^符号,表示非,除---之外,这里表示除0-9之外的任意字符 # \d 匹配数字,即 [0-9]
# \D 匹配⾮数字,即不是数字 [^0-9]
# \s 匹配空⽩,即 空格,tab键 [\t\n\r\f\v]
# \S 匹配⾮空⽩ [^\t\n\r\f\v]
# \w 匹配单词字符,即a-z、A-Z、0-9、_ [a-zA-Z0-9_]
# \W 匹配⾮单词字符 [^[a-zA-Z0-9_]]
# \b 匹配一个特殊字符边界,比如 空格、&、# 等 # 定位:
# ^ 表示起始定位
# $ 表示结束定位 # 匹配次数:
# * 表示任意次
# + 至少1次 [1,+oo]
# ? 匹配0次或者1次
# {a,b} 匹配指定的次数范围,如 {0,}相当于匹配任意次 ,{6} 表示匹配6次 # 分组 & 后向引用 & 别名:
# (ab) 将括号中字符作为⼀个分组
# \num 引⽤分组num匹配到的字符串
# (?P<name>) 分组起别名
# (?P=name) 引⽤别名为name分组匹配到的字符 # | 匹配左右任意⼀个表达式
2. findall
2.1 贪婪匹配&惰性匹配
1)贪婪模式
- findall默认就是贪婪模式,其会尽可能多的匹配
- findall会将所有匹配符合的内容保存到一个列表中
import re # 导入re模块 # findall方法第一个参数是匹配的规则,第二个参数是要匹配的字符串
# findall会将所有匹配符合的内容保存到一个列表中
print(re.findall("hgzero", "thisishgzero"))
# 输出:[hgzero]
data1 = re.findall("hg", "hgzerohgwzh")
print(data1)
# 输出:['hg', 'hg']
2)惰性模式
- 惰性模式就是尽可能少的去匹配
data1 = re.findall("hg*", "hggggg") # 贪婪模式
data2 = re.findall("hg*?", "hggggg") # 惰性模式,后面的那个问号就表示惰性模式
print(data1) # 输出:['hggggg']
print(data2) # 输出:['h']
2.2 字符串转义流程
字符串转义的流程:字符串 --> python解释器转义 --> re模块的转义
# 转义
ret1 = re.findall("www.baidu", "www.baidu") # 这里面的 . 会代指任意字符(除\n外)
ret1 = re.findall("www\.baidu", "www.baidu") # 这里面,反斜杠的添加会让 . 符号失去元字符代指的意义,从而使其就表示普通的点 . 符号 # 字符串转义的流程: 字符串---> python解释器转义---> re模块的转义
ret2 = re.findall(r"I\b", "I hIo Ion") # 这里面的r ,表示在python层次不使用转义字符,直接将其传递给re模块
ret3 = re.findall("I\\\\b", "I hIo Ion") # 这里适用4个\ , 表示在python解释器层次转义成2个\ , 然后再将其传入re模块进行转义 re.findall("I\\b", "I what") # 这样使\\b在python层次被转义成\b传递给re模块
re.findall(r"I\b", "I what") # 这样在前面加上r ,可以让python不转义字符串内容,而直接传递给re
3. search
search会将匹配到的结果保存到一个对象中,且只匹配第一个对象。
用search取到的对象必须要用group取值。
# search会将匹配到的结果保存到一个对象中,且只匹配第一个对象
sear = re.search("\d+", "fasdfsaf345kdf89") # search返回的只是一个对象,且只返回找到的第一个
retu = sear.group() # 用search取到的对象必须要用group取值 # 可以用?P<name>的形式给某一部分命名别名
re.search("(?P<name>[a-z]+)(?P<age>\d+)", "hgzero21wzh23hg26").group("name")
re.search("(?P<name>[a-z]+)(?P<age>\d+)", "hgzero21wzh23hg26").group("age")
4. match
match只从开始开始匹配,且只匹配一次,返回一个对象,若没匹配到则什么都不返回
# match只从开始开始匹配,且只匹配一次,返回一个对象,若没匹配到则什么都不返回
re.match("\d+", "234fda")
5. split
split会将字符串按照某字符分割,然后保存为一个列表
# split会将字符串按照某字符分割
re.split(" ", "hello abc what") # 将字符串按照空格分割,保存到一个列表中
re.split("[ |]", "hello welcome|hi hgzero") # 将字符串按照空格或者|进行分割后保存到一个列表中 re.split("[ab]", "abc") # 先按照a分割,左边形成一个空,然后将得到的bc再按照b分割,左边又得到一个空
# 打印结果为 ['', '', 'c']
6. sub
sub可以完成字符串的替换功能
# sub可以完成字符串的替换功能
re.sub("\d+", "A", "welcome666hgzero987") # 将第三个参数中的字符串中的数字转换成A
# 这里面的第四个参数可以限定匹配替换的次数 re.subn("\d", "A", "welcome666hgzero987")
# 将匹配到的内容放在一个元组里,结果中的第二个值为匹配替换的次数
# 打印结果为 ('welcomeAAAhgzeroAAA', 6)
7. compile
compile可以事先定义好规则,保存为一个对象,然后后面可以直接使用这个对象而无需再定义规则
# compile可以事先定义好规则,保存一个对象,然后后面可以直接使用这个对象而无需再定义规则
com = re.compile("\d+")
com.findall("welcome666hgzero987")
8. finditer
finditer可以将得到的数据保存到一个迭代器中
# finditer可以将得到的数据保存到一个迭代器中
ret = re.finditer("\d", "welcome666hgzero987")
next(ret).group() # 可以通过next函数加上group调用迭代器中的内容 re.findall("www\.(baidu|163)\.com", "www.baidu.com") # findall会优先将分组中的内容返回
# 这里的返回结果为 ['baidu']
re.findall("www\.(?:baidu|163)\.com", "www.baidu.com") # 【在分组中加上 ?: 可以去掉分组的优先级】
Python之re正则的更多相关文章
- python浅谈正则的常用方法
python浅谈正则的常用方法覆盖范围70%以上 上一次很多朋友写文字屏蔽说到要用正则表达,其实不是我不想用(我正则用得不是很多,看过我之前爬虫的都知道,我直接用BeautifulSoup的网页标签去 ...
- python匹配ip正则
python匹配ip正则 #!/usr/bin/env python # -*- coding:utf-8 -*- import re ip_str = "asdad1.1.1.1sdfwe ...
- 【归纳】正则表达式及Python中的正则库
正则表达式 正则表达式30分钟入门教程 runoob正则式教程 正则表达式练习题集(附答案) 元字符\b代表单词的分界处,在英文中指空格,标点符号或换行 例子:\bhi\b可以用来匹配hi这个单词,且 ...
- python 爬虫之 正则的一些小例子
什么是正则表达式 正则表达式是对字符串操作的一种逻辑公式,就是 事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符”,这个“规则字符” 来表达对字符的一种过滤逻辑. 正则并不是pyth ...
- Python实例---利用正则实现计算器[FTL版]
import re # 格式化 def format_str(str): str = str.replace('--', '+') str = str.replace('-+', '-') str = ...
- Python中的正则
regex_lst = [ ('字符组',), ('非打印字符',), ('特殊字符',), ('定位符',), ('限定符',), ('re模块',), ('分组命名',), ('或匹配',), ( ...
- Python模块(三)(正则,re,模块与包)
1. 正则表达式 匹配字符串 元字符 . 除了换行 \w 数字, 字母, 下划线 \d 数字 \s 空白符 \n 换行符 \t 制表符 \b 单词的边界 \W \D \S 非xxx [ ...
- python基础知识---正则
一.python正则简介 python的re模块,让python能够支持perl正则 perl正则的字符集("." "[abc]" "(abc) ...
- python的re正则表达
正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英语:Regular Expression,在代码中常简写为regex.regexp或RE),是计算机科学的一个概念.正则表 ...
- Python之re正则模块
正则表达式可以帮助我们更好的描述复制的文本格式,可以更好地利用它们对文本数据进行检索.替换.提取和修改操作. http://www.cnblogs.com/huxi/archive/2010/07/0 ...
随机推荐
- rbd-mirror新功能
RBD 的 mirroring 功能将会在下一个稳定版本Jewel中实现,这个Jewel版本已经发布了第一个版本10.1.0,这个功能已经在这个发布的版本中实现了 一.基本原理 我们试图解决的或者至少 ...
- Mac系统使用Parallels Desktop安装Win10
1.Parallels Desktop破解版下载 2.原版Windows 10 2004 X64位 (原版安装)2020 11 Windows 系统镜像必须为原版,ghost版不行.亲测ghost版本 ...
- 深度分析ReentrantLock源码及AQS源码,从入门到入坟,建议先收藏!
一.ReentrantLock与AQS简介 在Java5.0之前,在协调对共享对象的访问时可以使用的机制只有synchronized和volatile.Java5.0增加了一种新的机制:Reentra ...
- 苹果电脑下载电影教程:如何用folx下载《小妇人》
由西尔莎罗南.艾玛沃特森等知名影星重新演绎的<小妇人>又带动了新一轮的<小妇人>热潮.这部由露易莎创作的长篇小说,曾被多次拍摄,无论是小说本身,还是其影视资源,都能让观众回味无 ...
- 使用Folx下载任务完成后,怎么自动完成关闭
下载工具的优点是可以通过多线程的方式,提高文件的下载速度,减少用户的下载时间.但另一方面来说,下载工具为了达到高速下载,也会占据较多的带宽资源,甚至会拖慢电脑的运行. 因此,很多用户会利用电脑的空闲时 ...
- JVM垃圾回收器、内存分配与回收策略
新生代垃圾收集器 1. Serial收集器 serial收集器即串行收集器,是一个单线程收集器. 串行收集器在进行垃圾回收时只使用一个CPU或一条收集线程去完成垃圾回收工作,并且会暂停其他的工作线程( ...
- Linux 系统故障排查,这里看过来
来源:https://www.jianshu.com/p/0bbac570fa4c 导读 有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源.这时候就需要登录服务器进一步深入分析问题的 ...
- 区块链V1版本实现之五
代码重构: block.go文件: package main import ( "crypto/sha256" ) //定义区块结构 type Block struct { //前 ...
- Java 基础之 String 类
String String 被声明为 final,因此不能被继承.(Integer 等包装类也不能被继承) 在 java8 中,String 内部使用 char 数组 来存储数据 public fin ...
- kafka 消费组功能验证以及消费者数据重复数据丢失问题说明 3
原创声明:作者:Arnold.zhao 博客园地址:https://www.cnblogs.com/zh94 背景 上一篇文章记录了kafka的副本机制和容错功能的说明,本篇则主要在上一篇文章的基础上 ...