(XWZ)的python学习笔记Ⅶ——正则表达式
正则表达式
正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。python中使用re.match()
函数来判断给定字符串和正则表达式是否匹配,匹配是从左到右进行匹配,直到正则表达式匹配完或匹配失败,若匹配成功,则返回Match
对象,否则返回None
。
\n
匹配换行符,\f
匹配换页符,\t
匹配制表符,\r
匹配回车符,\t
匹配任何空白字符(空格,制表符,换页符等),\w
匹配任何一个数字或字母,\d
匹配一个数字,.
匹配任意字符。- 许多元字符要求在试图匹配它们时特别对待。若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符\ 放在它们前面。下表列出了正则表达式中的特殊字符:
- $: 匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n’ 或 ‘\r’。要匹配 $ 字符本身,请使用 ‘$’。
- ( ):标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 ( 和 )。
- *:匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 *。
- +:匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 +。
- .:匹配除换行符 \n 之外的任何单字符。要匹配 . ,请使用 .
- [:标记一个中括号表达式的开始。要匹配 [,请使用
- ?:匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请
- \: 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n’ 匹配字符 ‘n’。’\n’ 匹配换行符。序列 ‘\’ 匹配 “”,而 ‘(’
- ^:匹配输入字符串的开始位置,除非在方括号表达式中使用,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合。要匹配 ^ 字符
- {:标记限定符表达式的开始。要
- |: 指明两项之间的一个选择。要匹配 |,请使用 |。
- 限定符用来指定组件应出现的次数:*表示出现0次,1次或多次;+表示出现一次或多次;?表示出现0或1次;{n}表示出现n次;{n,}表示至少出现n次;{n,m}表示出现n到m次。
- []表达式用来匹配给定范围的***一个字符***,比如[!a-zA-Z\s]可以用来匹配’!’、小写字母、大写字母、空白字符。
- ()用来进行选择,比如(ab|xy|ef)可以匹配‘ab’、‘xy’、和’ef’。同时还具有提取分组(Group)的功能,放在()中的能够视为一个整体。来看个例子,我们希望能够匹配像前面几个是数字,中间是任意个abc,最后是yesterday、today或tomorrow的字符串:
import res = input('输入一个字符串:')
if re.match('\d*(abc)*(yesterday|today|tomorrow)', s):print('yes')
else:print('no')
运行结果如下:
输入 12yesterday
In [24]: runfile(‘C:/Users/Whisky/.spyder-py3/temp.py’, wdir=‘C:/Users/Whisky/.spyder-py3’)
输入一个字符串:12yesterday
yes
输入 1abctoday
In [25]: runfile(‘C:/Users/Whisky/.spyder-py3/temp.py’, wdir=‘C:/Users/Whisky/.spyder-py3’)
输入一个字符串:1abctoday
yes
输入 12345645abcabcabctomorrow
In [26]: runfile(‘C:/Users/Whisky/.spyder-py3/temp.py’, wdir=‘C:/Users/Whisky/.spyder-py3’)
输入一个字符串:12345645abcabcabctomorrow
yes
如果我们要提取字符串中的某些子串也可以使用():
import res = input('输入一个字符串:')
m = re.match('<([a-zA-Z]+)>\{(\d+)\}', s)
if m:print('匹配的串为 %s' % m.group(0))print('name: %s' % m.group(1))print('age: %s' % m.group(2))
else:print('匹配失败!')
运行结果如下:
In [28]: runfile(‘C:/Users/Whisky/.spyder-py3/temp.py’, wdir=‘C:/Users/Whisky/.spyder-py3’)
输入一个字符串:{10}
匹配的串为 {10}
name: Dolly
age: 10
In [30]: runfile(‘C:/Users/Whisky/.spyder-py3/temp.py’, wdir=‘C:/Users/Whisky/.spyder-py3’)
输入一个字符串:{23}
匹配的串为 {23}
name: Mike
age: 23
group(0)
是匹配的字符串。
- *和+默认是贪婪匹配,即尽可能匹配多的字符串,如果要使用非贪婪匹配则需要再加上?,见下面的例子:
>>> re.match(r'^(\d+)(0*)$', '102300').groups()
('102300', '')
由于默认采用贪婪匹配,故(\d+)
尽可能匹配多的字符串,导致(0*)
匹配空字符串。要使+采用非贪婪匹配在其后加上?
就行了:
>>> re.match(r'^(\d+?)(0*)$', '102300').groups()
('1023', '00')
(XWZ)的python学习笔记Ⅶ——正则表达式相关推荐
- python学习笔记 正则表达式 详解2
python学习笔记 正则表达式 详解 行定位符 行定位符就是用来描述子串的边界."^"表示行的开始:"$"表示行的结尾 ^tm:匹配以子串tm的开始位置是行头 ...
- Python学习笔记(十一)
Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...
- Python学习笔记:Day 16 编写移动App
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:Day15 部署Web App
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:Day14 完成Web App
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:Day13 提升开发效率
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:Day 12 编写日志列表页
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此, 写下这些 ...
- Python学习笔记:Day11 编写日志创建页
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:Day 10 用户注册和登陆
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:Day 9 编写API
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
最新文章
- Linux 环境下NFS 服务搭建
- Java虚拟机最多支持多少个线程的探讨
- 2020年数据中心值得关注的8大趋势
- jQuery ajax的traditional参数的作用
- Maven(二):常用命令、依赖管理
- C++学习笔记7[指针]
- unity ab包加载_Unity资源管理和打包
- 从工作到创业迈开这一步很艰难吗
- 谈谈阿里log4j2事件:严重性是个主观判断
- Linux操作系统基本使用知识
- msys2下用cmake构建poppler和libpng
- JAVA - JDK 1.8 API 帮助文档-中文版
- IP地址分为A,B,C,D,E五类
- 饼图制作软件,饼图的制作方法
- C语言丨getch(),getche()和getchar()的区别
- 【大底大顶接近预警】副图指标 分清大顶大底 轻松做波段 通达信 源码
- 三门问题详解(附C语言实现)
- java word导出表格_Java Word模板导出包含表格单元格合并
- Android TextView文字底部或者中间 加横线
- 从蒙牛到小度,跨年晚会中的国民品牌变迁
热门文章
- steam移动所有文件至新库文件夹失败_VBA进阶 | 文件操作17:File对象与Files集合详解...
- 生化危机5显示无法连接服务器,《生化危机5》黄金版无法联机怎么办?
- android mvp知乎,安卓日记——MVP重构知乎日报
- msdia 80.dll的正确位置
- Ubuntu12.04 64位 无法运行32位程序 吉林大学校园网客户端Drcom DrClient
- 支持向量机的原理与实践
- GAMES101-讲课极棒的闫令琪老师-个别概念理解
- RGMII以太网测试方案
- 计算机二进制发明者,谁是二进制的发明者
- php spider 开发文档,爬虫进阶开发——之技巧篇 - 开发PHPSpider爬虫的常用工具 - 《phpspider开发文档》 - 书栈网 · BookStack...