对python3中的RE(正则表达式)-详细总结


Posted in Python onJuly 23, 2019

1.引入正则模块(Regular Expression)

要使用python3中的RE则必须引入 re模块

import re #引入正则表达式

2.主要使用的方法 match(), 从左到右进行匹配

#pattern 为要校验的规则
#str 为要进行校验的字符串
result = re.match(pattern, str) 
 
#如果result不为None,则group方法则对result进行数据提取

3. 正则表达式

1️⃣单字符匹配规则

字符 功能
.  匹配任意1个字符(除了\n)
[]  匹配[]中列举的字符
\d  匹配数字,也就是0-9
\D  匹配非数字,也就是匹配不是数字的字符
\s  匹配空白符,也就是 空格\tab
\S  匹配非空白符,\s取反
\w  陪陪单词字符, a-z, A-Z, 0-9, _
\W  匹配非单词字符, \w取反

2️⃣表示数量的规则

字符 功能
*  匹配前一个字符出现0次多次或者无限次,可有可无,可多可少
+  匹配前一个字符出现1次多次或则无限次,直到出现一次
?  匹配前一个字符出现1次或者0次,要么有1次,要么没有
{m}  匹配前一个字符出现m次
{m,} 匹配前一个字符至少出现m次
{m,n} 匹配前一个字符出现m到n次

例一: 验证手机号码是否符合规则(不考虑边界问题)

#首先清楚手机号的规则
#1.都是数字 2.长度为11 3.第一位是1 4.第二位是35678中的一位
 
pattern = "1[35678]\d{9}"
phoneStr = "18230092223"
 
result = re.match(pattern, phoneStr)
result.group()
 
#执行结果如下图:

对python3中的RE(正则表达式)-详细总结

4. 原始字符串raw, 先来看如下实例:

对python3中的RE(正则表达式)-详细总结

在上图中: 在给str赋值"\nabc"前加上"r"之后,python解释器会自动给str的值"\nabc"在加上一个"\".

使str在被打印的时候,能够保持原始字符串的值"\nabc"打印出来.

例二: (原始字符串在正则表达式中的应用)

对python3中的RE(正则表达式)-详细总结

假若没有原始自付出r,则我们就要进行如下的操作: 给pattern加上双倍的"\"以避免转义字符中减少"\".会比较麻烦

当我们使用r原始字符串时,就不必考虑字符串的转移问题,更易集中解决字符匹配问题.

对python3中的RE(正则表达式)-详细总结

5. 表示边界

字符 功能
^  匹配字符串开头
$  匹配字符串结尾
\b  匹配一个单词的边界
\B  匹配非单词边界

例三: 边界(制定规则来匹配str="ho ve r")

import re
 
#定义规则匹配str="ho ve r"
#1. 以字母开始
#2. 中间有空字符
#3. ve两边分别限定匹配单词边界
 
pattern = r"^\w+\s\bve\b\sr"
str = "ho ve r"
result = re.match(pattern, str)
result.group()

6. 匹配分组

字符  功能
|   匹配左右任意一个表达式
(ab)  将括号中字符作为一个分组
\num  引用分组num匹配到的字符串
(?P<name>) 分组起别名
(?P=name) 引用别名为name分组匹配到的字符串

例四: 匹配出0-100之间的数字

import re
 
#匹配出0-100之间的数字
#首先:正则是从左往又开始匹配
#经过分析: 可以将0-100分为三部分
#1. 0  "0$"
#2. 100  "100$"
#3. 1-99  "[1-9]\d{0,1}$"
#所以整合如下
 
pattern = r"0$|100$|[1-9]\d{0,1}$"
#测试数据为0,3,27,100,123
result = re.match(pattern, "27")
result.group()
 
#将0考虑到1-99上,上述pattern还可以简写为:pattern=r"100$|[1-9]?\d{0,1}$"
#测试结果如下图:

对python3中的RE(正则表达式)-详细总结

例五: 匹配分组,获取页面中的<h1>标签中的内容

import re
#匹配分组,获取页面<h1>标签中的内容, 爬虫的时候会用到
 
str = "<h1>hello world!<h1>"
pattern = r"<h1>(.*)</h1>"
result = re.match(pattern, str)
result.group()
 
#执行如下图

对python3中的RE(正则表达式)-详细总结

例六: 分组引用, 精确获取多个标签内的内容

import re
 
#引用分组,精确获取多个标签内的内容
#"\1"是对第一个分组的引用,同理......
 
str = "<span><h1>hello world!</h1></span>"
pattern = r"<(.+)><(.+)>.*</\2></\1>"
result = re.match(pattern, str)
result.groups()
 
#执行如下图:

对python3中的RE(正则表达式)-详细总结

例七-2:分组起别名

import re
 
#分组起别名
 
str = "<span><h1>hello world!</h1></span>"
pattern = "<(?P<key1>.+)><(?P<key2>.+)>(?P<nr>.*)</(?P=key2)></(?P=key1)>"
result = re.match(pattern, str)
result.groups()
 
#执行如下图:

对python3中的RE(正则表达式)-详细总结

以上这篇对python3中的RE(正则表达式)-详细总结就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 运算符 供重载参考
Jun 11 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
May 25 Python
浅析Python中的赋值和深浅拷贝
Aug 15 Python
Flask数据库迁移简单介绍
Oct 24 Python
使用Python读取大文件的方法
Feb 11 Python
python如何实现内容写在图片上
Mar 23 Python
Python中staticmethod和classmethod的作用与区别
Oct 11 Python
python对常见数据类型的遍历解析
Aug 27 Python
DJango的创建和使用详解(默认数据库sqlite3)
Nov 18 Python
python ETL工具 pyetl
Jun 07 Python
Python中bisect的用法及示例详解
Jul 20 Python
pandas apply使用多列计算生成新的列实现示例
Feb 24 Python
python正则表达式匹配不包含某几个字符的字符串方法
Jul 23 #Python
python使用百度文字识别功能方法详解
Jul 23 #Python
Python使用type关键字创建类步骤详解
Jul 23 #Python
Python安装selenium包详细过程
Jul 23 #Python
python中列表的切片与修改知识点总结
Jul 23 #Python
python自动化测试之DDT数据驱动的实现代码
Jul 23 #Python
python用match()函数爬数据方法详解
Jul 23 #Python
You might like
DC四月将推出百页特刊漫画 纪念小丑诞生80周年
2020/04/09 欧美动漫
js和php邮箱地址验证的实现方法
2014/01/09 PHP
php自定义session示例分享
2014/04/22 PHP
C# WinForm中实现快捷键自定义设置实例
2015/01/23 PHP
php实现获取文件mime类型的方法
2015/02/11 PHP
PHP学习笔记之session
2018/05/06 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
phpStorm2020 注册码
2020/09/17 PHP
用Javascript 获取页面元素的位置的代码
2009/09/25 Javascript
javascript中的toFixed固定小数位数 简单实例分享
2013/07/12 Javascript
js获取事件源及触发该事件的对象
2013/10/24 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
js实现有过渡渐变效果的图片轮播相册(兼容IE,ff)
2016/01/19 Javascript
深入浅析JavaScript中的作用域和上下文
2016/03/26 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
javascript读取文本节点方法小结
2016/12/15 Javascript
详解AngularJS controller调用factory
2017/05/19 Javascript
Vue封装的可编辑表格插件方法
2018/08/28 Javascript
解决VUE中document.body.scrollTop为0的问题
2018/09/15 Javascript
JavaScript实现图片的放大缩小及拖拽功能示例
2019/05/14 Javascript
vue input输入框关键字筛选检索列表数据展示
2020/10/26 Javascript
vue获取data数据改变前后的值方法
2019/11/07 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
Vue.js 中制作自定义选择组件的代码附演示demo
2020/02/28 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
python3.0 字典key排序
2008/12/24 Python
举例详解Python中yield生成器的用法
2015/08/05 Python
python Selenium爬取内容并存储至MySQL数据库的实现代码
2017/03/16 Python
Python常用库Numpy进行矩阵运算详解
2020/07/21 Python
Python 发送邮件方法总结
2020/08/10 Python
大学生学生会工作总结2015
2015/05/26 职场文书
《火烧云》教学反思
2016/02/23 职场文书
2019运动会广播加油稿汇总
2019/08/21 职场文书
吉利入股戴姆勒后smart“长大了”
2022/04/21 数码科技
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android