python进阶11 正则表达式

一、概念

#正则表达式主要解决什么问题?
#1、判断一个字符串是否匹配给定的格式,判断用户提交的又想的格式是否正确
#2、从一个字符串中按指定格式提取信息,抓取页面中的图片数据 res =re.findall(r'^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.cpm$','121212312@qq.com')#看看右边的邮箱是否匹配左边的格式 #注意:如果正则表达式中适用了小括号,namefindall函数匹配的只会是括号内的内容,而不是完整的匹配,可以利用这种机制来对需要的部分进行数据提取 res=re.findall(r'<img src="data:image/png;base64,(.*?)>',html)#在HTML页面中匹配base64数据

二、元字符

#什么是元字符
#本身具有特殊含义的字符

  通配元字符

#表示任意一个字符

import re

res=re.findall(r'a','abcae')#去去右边字符串中寻找所有满足左边格式的子字符串1
print(res) #输出['a','a'],只要能找到,我们就认为“匹配” res=re.findall(r'a.','abcae')#输出['ab','ae'],a后面加个任意字符 res=re.findall(r'a...','abcaecc')#输出['abca'],关于重复,只能输出前面的,原因是字符不能重复利用

  锚点元字符

#锁定行首  ^
#锁定行位 $
#指定边界 \b res=re.findall(r'^a','abcae') #以a为行首的匹配
print(res) #输出ab res=re.findall(r'a.$','abcae') #以.为行尾的匹配
print(res) #输出ae res=re.findall(r'\bab\b','ab abcd')#ab两边都是边界的匹配
print(res) #输出['ab']

  重复元字符

#我匹配要求是一个字符可能会连续重复
#{}表示将前面紧挨的字符重复n次 res = re.findall(r'ab{3}c','abbbc')#左边b{3}相当于bbb res = re.findall(r'ab{2,4}c','abbbc') #左边要求2到4个b #正则表达式里面不能加空格 res = re.findall(r'ab{2,}c','abbbc')#左边要求至少2个b
#需求:a接任意个b

res = re.findall(r'ab*c','abbbc')#左边任意个b,0-正无穷

res = re.findall(r'ab+c','abbbc')#左边任意个b,1-正无穷

res = re.findall(r'ab?c','abbbc')#左边表示0或1个

   重复字符串(非贪婪)

#{} * + ?  这些字符加上?后表示非贪婪,表示尽量给少的键

res = re.findall(r'ab*','abbbc')#不加?号表贪婪 尽可能匹配多的
print(res) #s输出abbb res = re.findall(r'ab*?','abbbc')#加个问号尽可能匹配少的
print(res) #输出ab

  选择元字符

#二选一 |      字符类 [...]
res = re.findall(r'a(b|d)c','abc-adc-aec') #想匹配出来abc和adc,不要aec,左边的就是表示中间的字符为b或者d res = re.findall(r'a[bd]c','abc-adc-aec') #[]表示想要列举出的所有情况,但是仅仅表示一个字符,输出['abc','adc'],表示选择多个字符的一个 res = re.findall(r'a[^bd]c','abc-adc-aec') #表示除bd以外的所有情况,表示反向 res = re.findall(r'a[b-d0-8]c','abc-adc-aec')#匹配字母b到d,数字0-8的所有情况

  字符字面值

#将元字符转义成原来的字符字义 /+元字符

res = re.findall(r'a+c','a+b') #匹配不出来,左边表示a的重复和b

res = re.findall(r'a\+c','a+b') #这样就可以了

#将原子符字义转义为有特殊意义的字符
#这便是预定义字符组的由来

三、预定义字符类

#预定义字符类           说明           对等字符组
\d 任意数字字符 [0-9]
\D 任意非数字字符 [^0-9]
\s 任意空白符 [\t\n\x08\f\r]
\S 任意非空白符 [^\t\n\x08\f\r]
\w 任意字母数字字符 [a-zA-Z0-9]
\W 任意非字母数字字符 [^a-zA-Z0-9]

四、分组

#为对多个字符的组合使用元字符
#分组对于匹配的影响
#对分组进行命名 res =re.findall(r'a(bc)+d','abcbcbcbcd')#为了将bc重复,可以将bc分组
print(res) #['bc'] 原因是只会匹配出()里面的东西
#为了使整个部分匹配出来,可以将整个部分括起来
res =re.findall(r'(a(bc)+d)','abcbcbcbcd')
print(res) #[('abcbcbcbcd','bc')]
res =re.findall(r'a(b|c)d','abc-acc-adc-aec')可以通过分组来实现a[bc]c
#按组提取数据
res =re.findall(r'\w+-\w+-\w+-\w+','abc-acc-adc-aec')
print(res)# 输出['abc-acc-adc-aec'] #如果不想要这个 -
res =re.findall(r'(\w+)-(\w+)-(\w+)-(\w+)','abc-acc-adc-aec')
#给分组命名
res =re.search(r'(?P<year>\d+)-(?P<mouth>\d+)-(?P<date>\d+)','2018-03-11')
print(res.groupdict())#输出('day':'11','mouth':'03','year':'2018')

五、总结

#正则表达式是一种一种通用的用来简洁的表达一组字符串的格式或规则,因此,正则表达式与python无关
#通过正则表达式可以去匹配现有的字符串
#通过正则匹配可以迅速过滤出我们需要的全部的或者部分字符串,泳衣查找文本中的特质值等等

python进阶11 正则表达式的更多相关文章

  1. python进阶(20) 正则表达式的超详细使用

    正则表达式   正则表达式(Regular Expression,在代码中常简写为regex. regexp.RE 或re)是预先定义好的一个"规则字符率",通过这个"规 ...

  2. python进阶之正则表达式

    概念: 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑. 目的? 给定一个正则表 ...

  3. Python 进阶 - 正则表达式

    1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...

  4. [.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门

    [.net 面向对象程序设计进阶] (2) 正则表达式 (一) 快速入门 1. 什么是正则表达式? 1.1 正则表达式概念 正则表达式,又称正则表示法,英文名:Regular Expression(简 ...

  5. 尚学python课程---15、python进阶语法

    尚学python课程---15.python进阶语法 一.总结 一句话总结: python使用东西要引入库,比如 json 1.python如何创建类? class ClassName: :以冒号结尾 ...

  6. Python::re 模块 -- 在Python中使用正则表达式

    前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...

  7. [.net 面向对象程序设计进阶] (4) 正则表达式 (三) 表达式助手

    [.net 面向对象程序设计进阶] (2) 正则表达式(三) 表达式助手 上面两节对正则表达式的使用及.NET下使用正则表达式作了详细说明,本节主要搜集整理了常用的正则表达式提供参考. 此外为了使用方 ...

  8. Python基础之 正则表达式指南

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例.本文的内容不包括如何编写高效的正则表达式.如何优化正则表达式,这些主题请查看其他教程 ...

  9. 【转载】Python中的正则表达式教程

    本文http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 正则表达式经常被用到,而自己总是记不全,转载一份完整的以备不时之需. 1. ...

随机推荐

  1. VC++共享文件夹

    BOOL NetShare(char * pShareName,char * pSharePath) { USES_CONVERSION; SHARE_INFO_502 si502; NET_API_ ...

  2. openfire build

    1. build path: a) source folder:包括openfire和各插件的代码. b) libraries:build/lib下jar包和插件下jar包,jdk/lib/tools ...

  3. win7 jenkins 修改主目录

    1.安装tomcat 2.下载Jenkins.war包,把Jenkins.war放在D:\01Install\tomcat\webapps目录下,启动tomcat

  4. MySQL 用户管理与权限管理

    MySQL 用户管理与权限管理 -- 操作环境mysql> show variables like 'version';  +---------------+--------+| Variabl ...

  5. bzoj 3501 PA2008 Cliquers Strike Back —— 贝尔数

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3501 用贝尔三角预处理贝尔数,拆模数并在 \( p \) 进制下使用公式,因为这样每次角标增 ...

  6. Html 5 版 电子时钟

    效果图: html 5 canvas元素  Html 5的canvas元素可以用于在网页上绘制图形[即canvas的作用]. canvas画布使用JavaScript在网页上绘制图形 其拥有绘制各种路 ...

  7. 使用二次封装的openStack发行版本网卡至少有2个

  8. my emacs configuration

    modified from https://github.com/flyingmachine/emacs-for-clojure ;;;; ;; Packages ;;;; ;; Define pac ...

  9. 此microsoft fix it不适用于您的操作系统 解决方案

    想卸载低版本的office,下载了一个office卸载程序,但是运行时提示  此microsoft fix it不适用于您的操作系统 错误,在网上找了下解决方案,如下: 右键点击“兼容性疑难检查”,等 ...

  10. phpstrom添加monokai-sublime主题

    phpstrom默认的主题看起来不是特别舒服,sublime的主题却相当养眼,搜索之后,大为惊喜. 下载地址:https://github.com/sumiaowen/jetbrains-monoka ...