概念

正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。

目的  

给定一个正则表达式和另一个字符串,我们可以达到如下的目的:
1. 给定的字符串是否符合正则表达式的过滤逻辑(称作“匹配”)。
2. 可以通过正则表达式,从字符串中获取我们想要的特定部分。

符号

正则表达试由一些普通字符和一些元字符(metacharacters)组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义,我下面会给予解释。在最简单的情况下,一个正则表达式看上去就是一个普通的查找串。例如,正则表达式"testing"中没有包含任何元字符,它可以匹配"testing"和"testing123"等字符串,但是不能匹配"Testing"。要想真正的用好正则表达式,正确的理解元字符是最重要的事情。下表列出了所有的元字符和对它们的一个简短的描述。
正则
待匹配字符
匹配
结果
说明
[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次
 
这边推荐一个验证正则表达式的一个工具 http://tool.chinaz.com/regex/
接下来大家可以使用上面的工具来测试下面说的实例

实例

匹配任意数字

[0123456789]---abc123def456只要一个字符串中包含数字,都会被匹配到

匹配任意小写字母

[a-z] ----abc123def456只要字符串中包含任意小写字符,都会被匹配

匹配任意大写字母

[A-Z] ----ABC123DEF456只要字符串中包含任意大写字符,都会被匹配

匹配数字+小写字母+大写字母

[0-9A-Za-z] ----ABCabc123DEF456只要字符串中包含数字小写大写字母都回匹配

\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进阶之正则表达式的更多相关文章

  1. python进阶11 正则表达式

    python进阶11 正则表达式 一.概念 #正则表达式主要解决什么问题? #1.判断一个字符串是否匹配给定的格式,判断用户提交的又想的格式是否正确 #2.从一个字符串中按指定格式提取信息,抓取页面中 ...

  2. python进阶(20) 正则表达式的超详细使用

    正则表达式   正则表达式(Regular Expression,在代码中常简写为regex. regexp.RE 或re)是预先定义好的一个"规则字符率",通过这个"规 ...

  3. Python 进阶 - 正则表达式

    1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...

  4. [.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门

    [.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门 1. 什么是正则表达式? 1.1 正则表达式概念 正则表达式,又称正则表示法,英文名:Regular Expression(简 ...

  5. python模块 re模块与python中运用正则表达式的特点 模块知识详解

    1.re模块和基础方法 2.在python中使用正则表达式的特点和问题 3.使用正则表达式的技巧 4.简单爬虫例子 一.re模块 模块引入; import re 相关知识: 1.查找: (1)find ...

  6. Python进阶(十二)----re模块

    Python进阶(十二)----re模块 一丶re模块 ​ re模块是python将正则表达式封装之后的一个模块.正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行. #正则表达式: ...

  7. 尚学python课程---15、python进阶语法

    尚学python课程---15.python进阶语法 一.总结 一句话总结: python使用东西要引入库,比如 json 1.python如何创建类? class ClassName: :以冒号结尾 ...

  8. Python高手之路【五】python基础之正则表达式

    下图列出了Python支持的正则表达式元字符和语法: 字符点:匹配任意一个字符 import re st = 'python' result = re.findall('p.t',st) print( ...

  9. python基础之正则表达式

    正则表达式语法 正则表达式 (或 RE) 指定一组字符串匹配它;在此模块中的功能让您检查一下,如果一个特定的字符串匹配给定的正则表达式 (或给定的正则表达式匹配特定的字符串,可归结为同一件事). 正则 ...

随机推荐

  1. BBS论坛(十五)

    15.1.登录界面完成 (1)front/signbase.html {% from 'common/_macros.html' import static %} <!DOCTYPE html& ...

  2. 深入解析 H.265 编码模式,带你了解Apple全面推进H.265的原因

    今天我们聊聊视频编码.视频文件亘古以来存在一个矛盾:高清画质和视频体积的冲突,相同编码标准下,视频更高清,视频体积更大.因此,应用更先进的视频编码标准,降低视频体积,可以大幅降低网站的流量消耗. 目前 ...

  3. .NET Core实战项目之CMS 第八章 设计篇-内容管理极简设计全过程

    写在前面 上一篇文章中我带着大家进行了权限部分的极简设计,也仅仅是一个基本的权限设计.不过你完全可以基于这套权限系统设计你的更复杂的权限系统,当然更复杂的权限系统要根据你的业务来进行,因为任何脱离实际 ...

  4. .NET Core实战项目之CMS 第九章 设计篇-白话架构设计

    前面两篇文章给大家介绍了我们实战的CMS系统的数据库设计,源码也已经上传到服务器上了.今天我们就好聊聊架构设计,在开始之前先给大家分享一下这几天我一直在听的<从零开始学架构>里面关于架构设 ...

  5. 花10分钟搞懂开源框架吧 - 【NancyFx.Net】

    NancyFx是什么? Nancy是一个轻量级的独立的框架,下面是官网的一些介绍: Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET 和 Mono 平台,框架的目标是保 ...

  6. 『字符串模式匹配 KMP』

    字符串模式匹配 我们要先了解一下问题是什么. 模式匹配是数据结构中字符串的一种基本运算,给定一个子串,要求在某个字符串中找出与该子串相同的所有子串,这就是模式匹配. KMP 然后我们来认识一下今天的主 ...

  7. Too many authentication failures for xxxx_username

    解释 这个报错通常是因为多个ssh key 验证,key太多了导致服务器拒绝接受认证请求. 可以通过 -v 参数,输出详细的过程.你会发现你提供的认证key,服务器拒绝链接,并提示异常:"T ...

  8. Python多环境管理

    Python环境管理 什么是Anaconda Anaconda是专注于数据分析的Python发行版本,包含了conda.Python等190多个科学包及其依赖项.Anaconda通过管理工具包.开发环 ...

  9. 痞子衡嵌入式:串口调试工具Jays-PyCOM诞生记(1)- 环境搭建(Python2.7.14 + pySerial3.4 + wxPython4.0.3)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是串口调试工具Jays-PyCOM诞生之环境搭建. 在写Jays-PyCOM时需要先搭好开发和调试环境,下表列出了开发过程中会用到的所有软 ...

  10. Django 系列博客(十二)

    Django 系列博客(十二) 前言 本篇博客继续介绍 Django 中的查询,分别为聚合查询和分组查询,以及 F 和 Q 查询. 聚合查询 语法:aggregate(*args, **kwargs) ...