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 ...
随机推荐
- 新手避坑 -- 用 Jenkins +miniprogram-ci 自动构建微信小程序
先看看效果: 要实现这样的效果,需要下面3步: 1.下载 node 依赖包 miniprogram-ci,编写预览和上传功能 2. 登录微信公众平台, 下载项目的privateKey+添加代码上传IP ...
- Django 笔记2018.2.7
1.基础知识 1.1web服务基本原理 1.2 WSGI 目前最通用的web接口规范,python默认支持,在Django中是一个库 1.3WEB基础知识 MTV (Model Template Vi ...
- C#高级编程之特性
特性定义 MSDN的描述:使用特性,可以有效地将元数据或声明性信息与代码(程序集.类型.方法.属性等)相关联. 将特性与程序实体相关联后,可以在运行时使用反射这项技术查询特性. 参考此处作者的解释 h ...
- 深度解析:java必须掌握的知识点——类的重用
类继承的概念和语法 类继承的概念 根据已有类来定义新类,新类拥有已有类的所有功能. Java只支持类的单继承,每个子类只能有一一个直接超类(父类). 超类是所有子类的公共属性及方法的集合,子类则是超类 ...
- 深度分析:Java虚拟机类加载机制、过程与类加载器
虚拟机类加载机制是把描述类的数据从 Class 文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型. 需要注意的是 Java 语言与其他编译时需要进 ...
- img元素的联用
img元素的常用属性: src属性:资源地址 alt属性:当图片资源失效时,将出现该属性的设置的文字 最简单的联动: 和a元素联用(直接用a标签套) <a href="https:// ...
- MySQL常用命令与语句
目录 Shell命令 查看系统信息 查看系统变量 设置系统变量 数据库操作 查看表信息 修改表语句 操作表 操作索引 操作约束 操作列 查询常用语句 Shell命令 mysql -uroot -p12 ...
- Luogu P2656 采蘑菇
尽管是缩点的习题,思路也是在看了题解后才明白的. 首先,每个强连通分量内的点都是一定互通的,也就是可以完全把这里面的边都跑满,摘掉所有能摘的蘑菇.那么,考虑给每一个强连通分量化为的新点一个点权,代表摘 ...
- Ubuntu\Linux 下编写及调试C\C++
一.在Ubuntu\Linux 下编写及调试C\C++需要配置基本的环境,即配置gcc编译器.安装vim编译器,具体配置安装步骤我在这里就不多说了. 二.基本环境配置完了我们就可以进入自己的程序编写了 ...
- BootstrapBlazor 组件库介绍
项目介绍 演示系统地址:https://www.blazor.zone Blazor 是一个使用 .NET 生成交互式客户端 Web UI 的框架: 使用 C# 代替 JavaScript 来创建丰富 ...