对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进行基础的函数式编程的教程
Mar 31 Python
python检查指定文件是否存在的方法
Jul 06 Python
浅析Python中的for 循环
Jun 09 Python
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
Jun 20 Python
Caffe均值文件mean.binaryproto转mean.npy的方法
Jul 09 Python
Django实现跨域的2种方法
Jul 31 Python
Python 用matplotlib画以时间日期为x轴的图像
Aug 06 Python
torch 中各种图像格式转换的实现方法
Dec 26 Python
Python3和PyCharm安装与环境配置【图文教程】
Feb 14 Python
Django项目uwsgi+Nginx保姆级部署教程实现
Apr 19 Python
PyTorch 如何设置随机数种子使结果可复现
May 12 Python
Python  序列化反序列化和异常处理的问题小结
Dec 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动画电影
2020/03/03 欧美动漫
分页详解 从此分页无忧(PHP+mysql)
2007/11/23 PHP
浅析PHP中json_encode与json_decode的区别
2020/07/15 PHP
javascript使用isNaN()函数判断变量是否为数字
2013/09/21 Javascript
js输入框邮箱自动提示功能代码实现
2013/12/10 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
2015/05/19 Javascript
js 截取或者替换字符串中的数字实现方法
2016/06/13 Javascript
AngularJS基础 ng-hide 指令用法及示例代码
2016/08/01 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
JS中解决谷歌浏览器记住密码输入框颜色改变功能
2017/02/13 Javascript
JS库之Highlight.js的用法详解
2017/09/13 Javascript
vue多页面开发和打包正确处理方法
2018/04/20 Javascript
详解JavaScript原生封装ajax请求和Jquery中的ajax请求
2019/02/14 jQuery
微信小程序学习笔记之函数定义、页面渲染图文详解
2019/03/28 Javascript
vue-cli随机生成port源码的方法
2019/09/02 Javascript
JavaScript中break、continue和return的用法区别实例分析
2020/03/02 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
vue 数据双向绑定的实现方法
2021/03/04 Vue.js
理解python多线程(python多线程简明教程)
2014/06/09 Python
Python中Random和Math模块学习笔记
2015/05/18 Python
在Django的form中使用CSS进行设计的方法
2015/07/18 Python
Python中多线程的创建及基本调用方法
2016/07/08 Python
Python编程求质数实例代码
2018/01/31 Python
Python使用gRPC传输协议教程
2018/10/16 Python
python对csv文件追加写入列的方法
2019/08/01 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
pycharm导入源码的具体步骤
2020/08/04 Python
html5 跨文档消息传输示例探讨
2013/04/01 HTML / CSS
分享全球十款超强HTML5开发工具
2014/05/14 HTML / CSS
空字符串(“”)和null的区别
2012/11/13 面试题
创伤外科专业推荐信范文
2013/11/19 职场文书
年度评优评先方案
2014/06/03 职场文书
感恩教育月活动总结
2014/07/07 职场文书
人力资源职位说明书
2014/07/29 职场文书
先进班集体事迹材料
2014/12/25 职场文书
Windows Server 2012 R2服务器安装与配置的完整步骤
2022/07/15 Servers