正则表达式

正则表达式是一种用来匹配字符串的强有力的武器。它的设计思想是用一种描述性的语言来给字符串定义一个规则,凡是符合规则的字符串,我们就认为它“匹配”了,否则,该字符串就是不合法的。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学习笔记Ⅶ——正则表达式相关推荐

  1. python学习笔记 正则表达式 详解2

    python学习笔记 正则表达式 详解 行定位符 行定位符就是用来描述子串的边界."^"表示行的开始:"$"表示行的结尾 ^tm:匹配以子串tm的开始位置是行头 ...

  2. Python学习笔记(十一)

    Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...

  3. Python学习笔记:Day 16 编写移动App

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  4. Python学习笔记:Day15 部署Web App

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  5. Python学习笔记:Day14 完成Web App

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  6. Python学习笔记:Day13 提升开发效率

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  7. Python学习笔记:Day 12 编写日志列表页

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此, 写下这些 ...

  8. Python学习笔记:Day11 编写日志创建页

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  9. Python学习笔记:Day 10 用户注册和登陆

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  10. Python学习笔记:Day 9 编写API

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

最新文章

  1. Linux 环境下NFS 服务搭建
  2. Java虚拟机最多支持多少个线程的探讨
  3. 2020年数据中心值得关注的8大趋势
  4. jQuery ajax的traditional参数的作用
  5. Maven(二):常用命令、依赖管理
  6. C++学习笔记7[指针]
  7. unity ab包加载_Unity资源管理和打包
  8. 从工作到创业迈开这一步很艰难吗
  9. 谈谈阿里log4j2事件:严重性是个主观判断
  10. Linux操作系统基本使用知识
  11. msys2下用cmake构建poppler和libpng
  12. JAVA - JDK 1.8 API 帮助文档-中文版
  13. IP地址分为A,B,C,D,E五类
  14. 饼图制作软件,饼图的制作方法
  15. C语言丨getch(),getche()和getchar()的区别
  16. 【大底大顶接近预警】副图指标 分清大顶大底 轻松做波段 通达信 源码
  17. 三门问题详解(附C语言实现)
  18. java word导出表格_Java Word模板导出包含表格单元格合并
  19. Android TextView文字底部或者中间 加横线
  20. 从蒙牛到小度,跨年晚会中的国民品牌变迁

热门文章

  1. steam移动所有文件至新库文件夹失败_VBA进阶 | 文件操作17:File对象与Files集合详解...
  2. 生化危机5显示无法连接服务器,《生化危机5》黄金版无法联机怎么办?
  3. android mvp知乎,安卓日记——MVP重构知乎日报
  4. msdia 80.dll的正确位置
  5. Ubuntu12.04 64位 无法运行32位程序 吉林大学校园网客户端Drcom DrClient
  6. 支持向量机的原理与实践
  7. GAMES101-讲课极棒的闫令琪老师-个别概念理解
  8. RGMII以太网测试方案
  9. 计算机二进制发明者,谁是二进制的发明者
  10. php spider 开发文档,爬虫进阶开发——之技巧篇 - 开发PHPSpider爬虫的常用工具 - 《phpspider开发文档》 - 书栈网 · BookStack...