python笔记-正则表达式
什么是正则表达式:
正则表达式是一个特殊的字符序列,能帮助我们方便的检查一个字符串是否与某种模式匹配(定义往往都很枯燥)
也称之为”模式“,即可用于检查一个给定的字符串是否符合某种模式
举例:
我们定义一个模式,平常经常用到的日期模式: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笔记-正则表达式的更多相关文章
- python笔记-正则表达式常用函数
1.re.findall()函数 语法:re.findall(pattern,string,flags=0) --> list(列表) 列出字符串中模式的所有匹配项,并作为一个列表返回.如果无匹 ...
- s21day25 python笔记
s21day25 python笔记 正则表达式 1.定义 定义:正则表达式是一种规则匹配字符串的规则 re模块本身只是用来操作正则表达式的,和正则本身没关系 为什么要有正则表达式? 匹配字符串 一个人 ...
- Python:笔记(6)——正则表达式
Python:笔记(6)——正则表达式 re模块 re模块用于在字符串中执行基于正则表达式模式的匹配和替换. 使用原始字符串 正则表达式使用 \ 对特殊字符进行转义,比如,为了匹配字符串 ‘pytho ...
- [Python学习笔记]正则表达式总结
常用缩写字符及其含义表格查询 缩写字符分类 含义 \d 0-9的任意数字 \D 除0-9的数字以外的任何字符 \w 任何字母.数字或下划线字符(可以认为是匹配"单词"字符) \W ...
- Python笔记之不可不练
如果您已经有了一定的Python编程基础,那么本文就是为您的编程能力锦上添花,如果您刚刚开始对Python有一点点兴趣,不怕,Python的重点基础知识已经总结在博文<Python笔记之不可不知 ...
- python笔记 - day6
python笔记 - day6 参考: http://www.cnblogs.com/wupeiqi/articles/5501365.html 大纲: 利用递归,实现阶乘: Python反射 pyt ...
- python笔记之常用模块用法分析
python笔记之常用模块用法分析 内置模块(不用import就可以直接使用) 常用内置函数 help(obj) 在线帮助, obj可是任何类型 callable(obj) 查看一个obj是不是可以像 ...
- Python:正则表达式详解
正则表达式是一个很强大的字符串处理工具,几乎任何关于字符串的操作都可以使用正则表达式来完成,作为一个爬虫工作者,每天和字符串打交道,正则表达式更是不可或缺的技能,正则表达式的在不同的语言中使用方式可能 ...
- python 笔记2016
列表,元组(不可添加和修改),字典 3种集合模式 模块----类---函数 要把文件变成双击运行,要把文件的属性选择python安装目录下的python.exe 1,查看数据类型 print(type ...
随机推荐
- 还在纠结学什么编程语言吗?Python可能会“教”你做人
这几年为什么Python在中国就火起来了? Python这个东西国,大概是从2017年末开始,突然就火了起来的.此前,对于Python,乃至编程,绝大多数程度上都是专业人士的话题,在普通大众层面上起不 ...
- Python初学者的自我修养,找到自己的方向
今天是 Python专题 的第22篇文章,原本今天是准备和大家继续Python当中多线程的使用的相关内容.然而前两天有一个读者在后台问我,学习Python有哪些适合新手入门的小项目推荐,所以今天这篇临 ...
- 手敲代码太繁琐?“拖拉拽”式Python编程惊艳到我了
Python到底有多火,从后端开发到前端开发:从金融量化分析到大数据:从物联网到人工智能,都有Python的踪迹. 很多人学习python,不知道从何学起.很多人学习python,掌握了基本语法过后, ...
- 内网 Maven 编译
内网 Maven 编译 有个特殊的需求,在不联网的情况下编译 Java 项目. 想到两种方案: 搭建 Nexus 私有镜像仓库. 直接把依赖 jar包 放在编译机的 maven 本地库中. 步骤简述 ...
- 比原链(Bytom)正式开源Bytom-JavaScript库
12月13日,比原链(Bytom)正式开源Bytom-JavaScript库,这个库是官方原生支持的新一代JavaScript SDK接口.JavaScript是世界上最多人使用的解释性脚本语言,JS ...
- JDK 1.8 中文 API CHM
链接: https://pan.baidu.com/s/1AiJn6RM1KoEL1n_96qoQhQ 提取码: n2ya
- JVM初探(五):类的实例化
一.概述 我们知道,一个对象在可以被使用之前必须要被正确地实例化.而实例化实际指的就是以一个java类为模板创建对象/实例的过程.比如说常见的 Person = new Person()代码就是一个将 ...
- Flutter 容器 (1) - Center
Center容器用来居中widget import 'package:flutter/material.dart'; class AuthList extends StatelessWidget { ...
- 靶机练习 - ATT&CK红队实战靶场 - 1. 环境搭建和漏洞利用
最近某个公众号介绍了网上的一套环境,这个环境是多个Windows靶机组成的,涉及到内网渗透,正好Windows和内网渗透一直没怎么接触过,所以拿来学习下. 下载地址:http://vulnstack. ...
- 题解 BZOJ4709
题目描述 一道简单DP优化调了好久qwq 首先分析题目,发现每次从一边取贝壳是完全没用的,此题本质就是将区间分成数个区间,使区间价值和最大. 可以发现一个性质,那就是最优解的每个区间的两端点一定相同且 ...