• 什么是正则表达式:

正则表达式是一个特殊的字符序列,能帮助我们方便的检查一个字符串是否与某种模式匹配(定义往往都很枯燥)

也称之为”模式“,即可用于检查一个给定的字符串是否符合某种模式

举例:

我们定义一个模式,平常经常用到的日期模式:XXXX-XX-XX,2018-03-10

在正则表达式的模式定义语法里:\d用来指定一个数字,因此我们将日期的正则表达式的模式定义成:”\d\d\d\d-\d\d-\d\d"

  • 什么是元字符:

元字符是一些在正则表达式中有特殊用途、不代表它本身字符意义的一组字符

利用元字符,我们可以控制字符串匹配的方式

比如上例中的\d,用来指定一个数字,"相当于[0-9],匹配任何单个的数字字符",而非d字母本身

  • 元字符各自含义

    正则表达式的完整元字符及各自的含义(主要有11个):

.   ^   $  *  +  ?  \   |   { }    []    ()

我们选挑重要的依次进行解释

1.[ ] 方括号

(1) 常用来指定一个字符集,如[abcd]匹配:a或b或c或d

(2) 元字符在”[]”中不起所用,比如:[a+]匹配:a或+

(3) 补集匹配:[^a],匹配非a的一个字符

(4) 匹配连续字符:[a-zA-Z0-9],匹配大小写英文字母和数字

2.^

匹配行首,直接匹配字符串中的每一个换行

3.$

匹配行尾,行尾是指:字符串尾,或一个换行字符后的任何位置

4.\

转义字符,如果要匹配”\”本身,需要使用再次转义:”\\”

一些特殊字符:

\d:匹配:[0-9]

\D:匹配:[^0-9],与 \d 相反,匹配任何非十进制数字的字符

\s:匹配:任何空白符,即:[\t\n\r\f\v]

\S:匹配:任何非空白符,即:[^\t\n\r\f\v]

\w:匹配:[a-zA-Z0-9_ ],即匹配任何字符

\W:匹配:[^a-zA-Z0-9_ ],与\w相反

5. *

匹配前一个字符或子表达式出现0次或多次

例如:ca*t 将匹配 ct(0 个字符 a),cat(1 个字符 a),caaat(3 个字符 a)

6. +

匹配前一个字符或子表达式出现1次或多次

例如: ca+t 会匹配 cat 和 caaat,但不会匹配 ct。

7.?

匹配前一个字符或子表达式出现1次或0次

例如 :大?帅哥 可以匹配 大帅哥,也可以匹配 帅哥。

8.{ }

匹配前一个字符或子表达式出现指定次数(即代表重复)

{0,}:0次或多次,相当于”*”

{1,}:1次或多次,相当于”+”

{0,1}:0次或1次,相当于”?”

{m,n}:m次到n次(m <= n),m是最少重复的次数,n是最多重复的次数

9.  .

匹配除换行符以外的任意一个字符

10. |

每一种条件匹配一次,且"|"和"[]"效果是相同的,返回形式一样

例如:

>>> print (re.findall(r"[abc]","abc"))

['a','b','c']

>>> print (re.findall(r"[a|b|c]","abc"))

['a','b','c']

11. ( )

圆括号分组匹配使得匹配返回元组

例如:

>>> print (re.findall(r"one two three four five six",a))

['one two three four five six']

>>> print (re.findall(r"(one) (two) (three) (four) (five) (six)",a))

[ ]返回空

  • python语言中的re模块

在python语言中,re模块用于提供正则表达式的全部功能,而re模块中最重要的两个函数是match()和re.search()

re.match()简介

格式:re.match(pattern,string,flag=0),

第一个参数pattern用于传入需要匹配的模式定义字符串

第二个参数string用于传入被匹配和检查的字符串内容

第三个flag用于传入标识,如是否区分大小写

例1:

import re

print(re.match("\d\d\d\d-\d\d-\d\d","2018-03-09"))

运行结果:<_sre.SRE_Match object; span=(0, 10), match='2018-03-09'>

代表2018-03-09符合我们定义的日期模式

例2:

import re

print(re.match("\d\d\d\d-\d\d-\d\d","2018-3-9"))

运行结果:NONE

代表不符合

思考一下,如何既满足符合一个数字的月份和日又符合两个数字的月份和日(见例3)

例3:

import re

print(re.match("\d\d\d\d-\d{1,2}-\d{1,2}","2018-3-9"))

如果看不懂,请返回到上节8.{}介绍部分

例4:

再思考一下,下面的代码

import re

print(re.match("\d{4}-\d{1,2}-\d{1,2}","2018-3-9"))

例5:

思考一下,下面的代码(可先看一下上一节\s和*的含义)

imprt re

print(re.match("\s*\d{4}-\d{1,2}-\d{1,2}","   2017-05-08")

代码是为了兼容日期前面如果出现多个空格的情况使用 \s*

例6:

import re

print(re.match("Dehom","Dehom Wang"))

回归最简单模式就是字符串本身,这很重要

补充知识:

Python中字符串前面加上 r 表示原生字符串,(r=raw)

Python里的原生字符串很好地解决了需要\转义字符这个问题,例如匹配一个数字的"\\d"可以写成r"\d"。有了原生字符串,不用担心是不是漏写了反斜杠,写出来的表达式也更直观

python笔记-正则表达式的更多相关文章

  1. python笔记-正则表达式常用函数

    1.re.findall()函数 语法:re.findall(pattern,string,flags=0) --> list(列表) 列出字符串中模式的所有匹配项,并作为一个列表返回.如果无匹 ...

  2. s21day25 python笔记

    s21day25 python笔记 正则表达式 1.定义 定义:正则表达式是一种规则匹配字符串的规则 re模块本身只是用来操作正则表达式的,和正则本身没关系 为什么要有正则表达式? 匹配字符串 一个人 ...

  3. Python:笔记(6)——正则表达式

    Python:笔记(6)——正则表达式 re模块 re模块用于在字符串中执行基于正则表达式模式的匹配和替换. 使用原始字符串 正则表达式使用 \ 对特殊字符进行转义,比如,为了匹配字符串 ‘pytho ...

  4. [Python学习笔记]正则表达式总结

    常用缩写字符及其含义表格查询 缩写字符分类 含义 \d 0-9的任意数字 \D 除0-9的数字以外的任何字符 \w 任何字母.数字或下划线字符(可以认为是匹配"单词"字符) \W ...

  5. Python笔记之不可不练

    如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...

  6. python笔记 - day6

    python笔记 - day6 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 大纲: 利用递归,实现阶乘: Python反射 pyt ...

  7. python笔记之常用模块用法分析

    python笔记之常用模块用法分析 内置模块(不用import就可以直接使用) 常用内置函数 help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像 ...

  8. Python:正则表达式详解

    正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能 ...

  9. python 笔记2016

    列表,元组(不可添加和修改),字典 3种集合模式 模块----类---函数 要把文件变成双击运行,要把文件的属性选择python安装目录下的python.exe 1,查看数据类型 print(type ...

随机推荐

  1. Echarts图表随浏览器大小,模块大小,位置实时更新

    1.图表位置随浏览器大小改变 2.图表位置随模块的改变而改变 只需要在事件函数中添加:

  2. 在centOS7上安装一套java运行环境

    前提:更换centos的默认yum源,提高下载速度. 备份系统自带的yum源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS- ...

  3. ECS7天实践进阶训练营Day5:使用ECS自建云端下载服务器

    一.概述 CCAA是服务器离线下载解决方案包,其组件中包含了Aria2提供了离线下载功能,能支持HTTP/HTTPS/FTP/BT/磁力链下载等常用离线下载模式及断点续传等功能.ccaa_web支撑于 ...

  4. OGG复制进程延迟高,优化方法一(使用索引)

    日常运维过程中,可能发现OGG同步进程延迟很高: 本篇介绍其中的一种方式. OGG复制进程,或者说同步进程及通过解析ogg trail文件,输出dml语句,在目标库执行dml操作,那么延迟高可能性其一 ...

  5. 2020-05-11:redis 10G 内存开一个实例 和redis 1G内存开10个实例有什么区别

    福哥答案2020-05-11: 此答案不完善,仅供参考.开10个实例相对更占资源,在多核下能充分利用资源.

  6. Spring——AOP实现

    Spring实现AOP 1.什么是 AOP AOP (Aspect Orient Programming),直译过来就是 面向切面编程.AOP 是一种编程思想,是面向对象编程(OOP)的一种补充.面向 ...

  7. 极简 Node.js 入门 - 2.4 定时器

    极简 Node.js 入门系列教程:https://www.yuque.com/sunluyong/node 本文更佳阅读体验:https://www.yuque.com/sunluyong/node ...

  8. 后端程序员必备的 Linux 基础知识+常见命令(近万字总结)

    大家好!我是 Guide 哥,Java 后端开发.一个会一点前端,喜欢烹饪的自由少年. 今天这篇文章中简单介绍一下一个 Java 程序员必知的 Linux 的一些概念以及常见命令. 如果文章有任何需要 ...

  9. Linux top详解

    命令 top 参数说明: d:改变显示的更新速度 q:  没有任何延迟的显示速度 c:切换显示模式,共有两种模式,一是只显示执行档的名称,零一种显示完整的路径与名称S:累计模式,会将已完成或消失的子行 ...

  10. 使用vs2008的一个问题 2008-01-08 13:13

    昨天在写控制台版的一个管理系统.语言是:c++ ,开发工具是:vs 2008 .功能简单的描述一下,它是就是简单的查询,插入,删除等操作,操作的对象是一个xml文件. 这时我要需要一个命令行参数,根据 ...