python进阶之正则表达式
概念
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
目的
符号
正则  | 
待匹配字符  | 
匹配  | 
说明  | 
[0123456789]  | 
8  | 
True  | 
在一个字符组里枚举合法的所有字符,字符组里的任意一个字符  | 
[0123456789]  | 
a  | 
False  | 
由于字符组中没有"a"字符,所以不能匹配  | 
[0-9]  | 
7  | 
True  | 
也可以用-表示范围,[0-9]就和[0123456789]是一个意思  | 
[a-z]  | 
s  | 
True  | 
同样的如果要匹配所有的小写字母,直接用[a-z]就可以表示  | 
[A-Z]  | 
B  | 
True  | 
[A-Z]就表示所有的大写字母  | 
[0-9a-fA-F]  | 
e  | 
True  | 
可以匹配数字,大小写形式的a~f,用来验证十六进制字符  | 
字符
元字符  | 
匹配内容  | 
| . | 匹配除换行符以外的任意字符 | 
| \w | 匹配字母或数字或下划线 | 
| \s | 匹配任意的空白符 | 
| \d | 匹配数字 | 
| \n | 匹配一个换行符 | 
| \t | 匹配一个制表符 | 
| \b | 匹配一个单词的结尾 | 
| ^ | 匹配字符串的开始 | 
| $ | 匹配字符串的结尾 | 
| \W | 
匹配非字母或数字或下划线  | 
| \D | 
匹配非数字  | 
| \S | 
匹配非空白符  | 
| a|b | 
匹配字符a或字符b  | 
| () | 
匹配括号内的表达式,也表示一个组  | 
| [...] | 
匹配字符组中的字符  | 
| [^...] | 
匹配除了字符组中字符的所有字符  | 
量词
量词  | 
用法说明  | 
| * | 重复零次或更多次(贪婪匹配) | 
| + | 重复一次或更多次(贪婪匹配) | 
| ? | 重复零次或一次 | 
| {n} | 重复n次 | 
| {n,} | 重复n次或更多次 | 
| {n,m} | 重复n到m次 | 
实例
匹配任意数字
匹配任意小写字母
匹配任意大写字母
[A-Z] ----ABC123DEF456只要字符串中包含任意大写字符,都会被匹配
匹配数字+小写字母+大写字母
\w与\W与[\w\W](匹配所有字符)


\s与\S与[\s\S](匹配所有字符)
  


\d与\D与[\d\D](匹配所有字符)
  


\n与\t(tab制表符与\b
  


^(匹配一个字符串的开头) 与$
  
(匹配以[a-z]开头,以[a-z]结尾的字符串,这里只能匹配2个字符的字符串,因为[]代表一个字符组)
a|b(从左向右匹配,优先匹配a)
  

(左边匹配了,右边不会再匹配)
[^...]
  

组合练习
*+?{}
| 待匹配字符串 | 正则表达式 | 匹配结果 | 说明 | 
| 
 小李和小王和小亮 小李和小王王和小亮亮亮  | 
[^和]+ | 
 小李 小李  | 
 匹配非'和'的所有字符串多次  | 
| 小李和小王王和小亮亮亮 | [^和]{2,4} | 小李 小王王 小亮亮亮  | 
匹配非‘和’的所有字符串2到4次 | 
| 小李和小王王和小亮亮亮 | [^和]{2,4}? | 小李 小王 小亮 亮亮  | 
匹配非‘和’的所有字符串2次 | 
| 小李和小王王和小亮亮亮 | 小.? | 小李 小王 小亮  | 
匹配小后面任意字符0次或1次 | 
| 小李和小王王和小亮亮亮 | 小.* | 小李和小王王和小亮亮亮 | 匹配小后面任意字符0次或多次 | 
| 小李和小王王和小亮亮亮 | 小.+ | 小李和小王王和小亮亮亮 | 匹配小后面任意字符一次或多次 | 
| 小李和小王王和小亮亮亮 | 小.{1,2} | 小李和 小王王 小亮亮  | 
匹配小后面任意字符一次到2次 | 
| 小李和小王王和小亮亮亮 | 小.*? | 小 小 小  | 
匹配小后面任意字符0次(因为有?限制,表示匹配最少的页就是0次即什么都不匹配) | 
字符集[] [^]
| 待匹配字符串 | 正则表达式 | 匹配结果 | 说明 | 
| 小李和小王王和小亮亮亮 | 小[李王王亮亮亮]* | 小李 小王王 小亮亮亮  | 
匹配小后面字符组里面任意字符0次或多次 | 
| 小李和小王王和小亮亮亮 | 小[^和]* | 小李 小王王 小亮亮亮  | 
匹配小后面非和子的任意字符0次或多次 | 
| 123abc345 | [\d] | 
 1 2 3 3 4 5  | 
匹配任意一个数字 | 
| 123abc345 | [\d]* | 
 123 345  | 
匹配任意多个数字 | 
| 123abc345 | [\d]+ | 
 123 345  | 
匹配任意多个数字 | 
分组()与或 | [^]
匹配15位或18位身份证,15位需都是数字组成,18位可以是数字或x结尾,首位都不能为0
| 待匹配字符串 | 正则表达式 | 匹配结果 | 说明 | 
| 110621199012014599 | ^[1-9]\d{13,16}[0-9x]$ | 110621199012014599 | 可以匹配到一个正确的身份证,但是如果是16位1106211990120145也同样能匹配到,但是这并不是身份证 | 
| ^[1-9]\d{14}(\d{2}[0-9x])?$ | 不会再匹配错误的身份证(你可以试试的) | ||
| 110621199012014599 | ^([1-9]\d{16}[0-9x]|[1-9]\d{14})$ | 110621199012014599 | 这个是比较好的表达式,先匹配18位,再匹配15位 | 
总结
要想熟练的使用正则表达式,还是要多练多写吧! 希望大家能像计算1+1=2这么简单的使用正则表达式
python进阶之正则表达式的更多相关文章
- python进阶11 正则表达式
		
python进阶11 正则表达式 一.概念 #正则表达式主要解决什么问题? #1.判断一个字符串是否匹配给定的格式,判断用户提交的又想的格式是否正确 #2.从一个字符串中按指定格式提取信息,抓取页面中 ...
 - python进阶(20) 正则表达式的超详细使用
		
正则表达式 正则表达式(Regular Expression,在代码中常简写为regex. regexp.RE 或re)是预先定义好的一个"规则字符率",通过这个"规 ...
 - Python 进阶 - 正则表达式
		
1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...
 - [.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门
		
[.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门 1. 什么是正则表达式? 1.1 正则表达式概念 正则表达式,又称正则表示法,英文名:Regular Expression(简 ...
 - python模块   re模块与python中运用正则表达式的特点   模块知识详解
		
1.re模块和基础方法 2.在python中使用正则表达式的特点和问题 3.使用正则表达式的技巧 4.简单爬虫例子 一.re模块 模块引入; import re 相关知识: 1.查找: (1)find ...
 - Python进阶(十二)----re模块
		
Python进阶(十二)----re模块 一丶re模块  re模块是python将正则表达式封装之后的一个模块.正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行. #正则表达式: ...
 - 尚学python课程---15、python进阶语法
		
尚学python课程---15.python进阶语法 一.总结 一句话总结: python使用东西要引入库,比如 json 1.python如何创建类? class ClassName: :以冒号结尾 ...
 - Python高手之路【五】python基础之正则表达式
		
下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...
 - python基础之正则表达式
		
正则表达式语法 正则表达式 (或 RE) 指定一组字符串匹配它;在此模块中的功能让您检查一下,如果一个特定的字符串匹配给定的正则表达式 (或给定的正则表达式匹配特定的字符串,可归结为同一件事). 正则 ...
 
随机推荐
- 【Redis篇】初始Redis与Redis安装
			
一.前述 Redis是当前比较热门的NOSQL系统之一,它是一个key-value存储系统.和Memcache类似,但很大程度补偿了Memcache的不足,它支持存储的value类型相对更多,包括st ...
 - 低延时的P2P HLS直播技术实践
			
本文根据4月21日OSC源创会·武汉站的现场分享为蓝本,重新整理.以下是演讲内容: 近几年,随着直播.短视频等视频领域对带宽要求的提升以及CDN行业竞争的加剧,很多CDN公司开始往P2P-CDN方向发 ...
 - Zuul介绍
			
1. Zuul是什么 Zuul是所有从设备和web站点到Netflix流媒体应用程序后端请求的前门.作为一个边缘服务应用程序,Zuul被构建来支持动态路由.监视.弹性和安全性.它还可以根据需要将请求 ...
 - 将dylib库嵌入macOS应用的方法
			
写作是一种习惯,稍微松懈,也许失去的就很多.过了一个年,居然很多天都没有更新,幸福的代价吧:) 标题的问题其实以前碰到过,不过当时在iOS,所以随手处理了没有重视. 而这次是在macOS,所使用的库, ...
 - 一纸理解JVM
			
JVM,JDK,JRE定义 JVM是Java Virtual Machine(Java虚拟机)的缩写. JDK是Java Development Kit JAVA语言开发工具箱(JAVA核心) JRE ...
 - Nginx 优化静态文件访问
			
简介 Web 开发中需要的静态文件有:CSS.JS.字体.图片,可以通过web框架进行访问,但是效率不是最优的. Nginx 对于处理静态文件的效率要远高于 Web 框架,因为可以使用 gzip 压缩 ...
 - 初探Java设计模式1:创建型模式(工厂,单例等)
			
Java 设计模式 一直想写一篇介绍设计模式的文章,让读者可以很快看完,而且一看就懂,看懂就会用,同时不会将各个模式搞混.自认为本文还是写得不错的,花了不少心思来写这文章和做图,力求让读者真的能看着简 ...
 - 版本管理工具Git(三)Gitlab高可用
			
高可用模式 企业版 社区版 我们这里说一下成本比较低的主备模式,它主要依赖的是DRBD方式进行数据同步,需要2台ALL IN ONE的GitLab服务器,也就是通过上面安装方式把所有组件都安装在一起的 ...
 - 手把手教你如何优雅的使用Aop记录带参数的复杂Web接口日志
			
前言 不久前,因为需求的原因,需要实现一个操作日志.几乎每一个接口被调用后,都要记录一条跟这个参数挂钩的特定的日志到数据库.举个例子,就比如禁言操作,日志中需要记录因为什么禁言,被禁言的人的id和各种 ...
 - 浅析Javascript单例模式
			
定义 保证一个类仅有一个实例,并提供一个访问它的全局访问点 .就想我们在开发中有些对象只需要一个,例如window对象. 1. 实现单例模式 var Singleton = function( nam ...