• 什么是正则表达式:

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

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

举例:

我们定义一个模式,平常经常用到的日期模式: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. 【CSP2019】括号树 题解(递推+链表)

    前言:抽时间做了做这道题,把学长送退役的题. ----------------- 题目链接 题目大意:定义$()$是合法括号串.如果$A,B$是合法括号串,那么$(AB),AB$为合法括号串.现给定根 ...

  2. 7月15日考试 题解(链表+状压DP+思维题)

    前言:蒟蒻太弱了,全打的暴力QAQ. --------------------- T1 小Z的求和 题目大意:求$\sum\limits_{i=1}^n \sum\limits_{j=i}^n kth ...

  3. 使用Azure人脸API对图片进行人脸识别

    人脸识别是人工智能机器学习比较成熟的一个领域.人脸识别已经应用到了很多生产场景.比如生物认证,人脸考勤,人流监控等场景.对于很多中小功能由于技术门槛问题很难自己实现人脸识别的算法.Azure人脸API ...

  4. SSM框架整合Demo

    目前项目大都开始采用SSM结构进行搭建,因为涉及项目比较多,新来的需求都是从现有项目中迁移一份出来进行修改,有的时候两个项目差别还是比较大,并不完全需要原有项目的东西,进行删减也是一项费神费时的事情, ...

  5. 【模式识别与机器学习】——PCA与Kernel PCA介绍与对比

    PCA与Kernel PCA介绍与对比 1. 理论介绍 PCA:是常用的提取数据的手段,其功能为提取主成分(主要信息),摒弃冗余信息(次要信息),从而得到压缩后的数据,实现维度的下降.其设想通过投影矩 ...

  6. 37 Reasons why your Neural Network is not working

    37 Reasons why your Neural Network is not working Neural Network Check List 如何使用这个指南 数据问题 检查输入数据 试一下 ...

  7. 痞子衡嵌入式:一种i.MXRT下从App中进入ROM串行下载模式的方法

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT下在App中利用ROM API进ISP/SDP模式的方法. 我们知道i.MXRT系列分为两大阵营:CM33内核的i.MXRT ...

  8. Java程序员面试必备:Volatile全方位解析

    前言 volatile是Java程序员必备的基础,也是面试官非常喜欢问的一个话题,本文跟大家一起开启vlatile学习之旅,如果有不正确的地方,也麻烦大家指出哈,一起相互学习~ 1.volatile的 ...

  9. Spring——IOC(控制反转)与DI(依赖注入)

    IOC与DI的理解及使用 控制反转IOC(Inversion of Control)是一种设计思想,DI(依赖注入)是实现IOC的一种方法.在没有IOC的程序中,我们使用面向对象编程,对象的创建于对象 ...

  10. Java引用类型之弱引用与幻像引用

    这一篇将介绍弱引用和幻像引用. 1.WeakReference WeakReference也就是弱引用,弱引用和软引用类似,它是用来描述"非必须"的对象的,它的强度比软引用要更弱一 ...