对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 实现在txt指定行追加文本的方法
Apr 29 Python
Python 中的Selenium异常处理实例代码
May 03 Python
Python3非对称加密算法RSA实例详解
Dec 06 Python
Python创建字典的八种方式
Feb 27 Python
Django Rest framework解析器和渲染器详解
Jul 25 Python
下载官网python并安装的步骤详解
Oct 12 Python
Python列表解析操作实例总结
Feb 26 Python
Python基于Dlib的人脸识别系统的实现
Feb 26 Python
Python实现在Windows平台修改文件属性
Mar 05 Python
python实现PDF中表格转化为Excel的方法
Jun 16 Python
python+requests接口自动化框架的实现
Aug 31 Python
Python爬虫基础初探selenium
May 31 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
php抓取网站图片并保存的实现方法
2015/10/29 PHP
php使用curl实现简单模拟提交表单功能
2017/05/15 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
JS解密入门之凭直觉解
2008/06/25 Javascript
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
JS如何判断移动端访问设备并解析对应CSS
2013/11/27 Javascript
JavaScript数组前面插入元素的方法
2015/04/06 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
AJAX和jQuery动态加载数据的实现方法
2016/12/05 Javascript
原生JS实现在线问卷调查投票特效
2017/01/03 Javascript
layui递归实现动态左侧菜单
2019/07/26 Javascript
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
python进阶教程之模块(module)介绍
2014/08/30 Python
python实现在目录中查找指定文件的方法
2014/11/11 Python
github配置使用指南
2014/11/18 Python
Python写入CSV文件的方法
2015/07/08 Python
python之从文件读取数据到list的实例讲解
2018/04/19 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
在dataframe两列日期相减并且得到具体的月数实例
2018/07/03 Python
python 与服务器的共享文件夹交互方法
2018/12/27 Python
python 反编译exe文件为py文件的实例代码
2019/06/27 Python
python3 selenium自动化测试 强大的CSS定位方法
2019/08/23 Python
python 基于dlib库的人脸检测的实现
2019/11/08 Python
Tensorflow中tf.ConfigProto()的用法详解
2020/02/06 Python
django 实现简单的插入视频
2020/04/07 Python
Python使用20行代码实现微信聊天机器人
2020/06/05 Python
JAVA SWT事件四种写法实例解析
2020/06/05 Python
HTML5 用动画的表现形式装载图像
2016/03/08 HTML / CSS
HTML5录音实践总结(Preact)
2020/05/07 HTML / CSS
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
JAVA程序设计笔试题面试题一套
2015/07/28 面试题
2014年行政助理工作总结
2014/11/19 职场文书
班主任高考寄语
2015/02/26 职场文书
学会感恩主题班会
2015/08/12 职场文书
小学数学新课改心得体会
2016/01/22 职场文书
浅谈PHP7中的一些小技巧
2021/05/29 PHP