正则表达式

概念: 正则匹配就是一个模糊的匹配 只要符合我的匹配规则 就会认为是正确的数据(精确的匹配)

1.[]     #代表原子表把想要匹配的内容写入原子表中   匹配包含的任意一位字符
    [a]     #匹配小写字母a
    [ab]    #匹配小写字母a或者b
    [aAbB]  #匹配字母a或b
    [195]   #匹配任意一位数字
    [a-z]   #匹配任意一位小写字母
    
2.^    #在原子表外称之为以...作为开头   放在原子表内叫取反  相当于 \A
    ^[abc]  #匹配以a/b/c字符作为开头
    [^abc]  #匹配任意一位小写字母a/b/c以外的字符
    ^abc    #匹配以小写字母abc开头的内容
    ^[0-9]
    ^[a-zA-Z0-9]
3.$   #以...作为结尾  相当于 \Z
    ^[1][3-9][0-9]{9}$  ^和$通常是组合使用 真正的限制匹配数据的正确性
4.{m}  #控制匹配前面数量的m次  不能单独使用 和普通的内容一起使用或者和原子表
    #匹配3个a的操作
    [a][a][a]
    aaa
    a{3}
    [a]{3}
    {4}  #错误写法
    [a-zA-Z]{3}
5.{m,n}  #控制匹配前面数量的m-n次  不能单独使用 和普通的内容一起使用或者和原子表
    #匹配qq号码
    5-11
    ^[1-9][0-9]{4,10}$
    
    010-778192
    101-621331
    [01]{3}\-[0-9]{6}
 
6.{m,}   #表示匹配前面数量至少m次
    [a-z]{3,}
    #1 匹配1-99的正则
    [1-9][0-9]{0,1}
    #2 匹配任意一位正负整数和小数 ?
    [\-]{0,1}[1-9]
7.?   #可有可无  匹配前面的正则表达式的 0次或者一次  类似于 {0,1}  或指明一个非贪婪的限定符
    [1-9][0-9]?
    [\-]?[1-9]
8. .   #匹配换行符\n以外的任意一位字符
9. *   #匹配前面表达式的任意次 相等于{0,}
10. .*  #匹配除换行符以外的任意字符任意次  贪婪模式
11. .*?  #匹配除换行符以外的任意字符任意次   非贪婪模式
12.  +   #匹配前面表达式的至少1次 相等于{1,}
13. .+   #匹配除换行符以外的任意字符至少1次  贪婪模式
14. .+?   #匹配除换行符以外的任意字符至少次   非贪婪模式
15. ()    #1.代表一个单元   2.子存储
16. |  #表示或
#匹配手机号码或者qq号码
(^[1-9][0-9]{4,10}$)|(^[1][3-9][0-9]{9}$)
 

正则函数

使用正则函数需要导入内置的 re模块

import re

修正符

  1. re.I 忽略大小写

  2. re.M 多行模式 改变^和$的作用

  3. re.S 改变.的行为 可以匹配换行符

特殊意义的字符

\d 相当于 [0-9]

\D 相当于 [^0-9]

\w 相当于 [a-zA-Z0-9_]

\W 相当于[^a-zA-Z0-9_]

\s 匹配空白字符

\S 匹配非空白字符

(1) re.match(pattern,string,flags) 匹配一次 必须从头开始

pattern:正则表达式

string: 要匹配的字符串的内容

flags: 修正符

返回结果:

匹配成功 返回对象

匹配失败 返回None

注意:

match必须从第一位开始匹配 如果第一位没有符合的 则匹配失败 类似于在正则前方添加^
只匹配一次

取值

  1. group() 将值取出

    group([index]) 索引可有可无 如果正则内没有存在括号 则不需要传index

  2. groups() 正则内括号的值 以元组形式进行返回

(2) re.search(pattern,string,flags) 匹配一次包含就可以

pattern:正则表达式

string: 要匹配的字符串的内容

flags: 修正符

返回结果:

匹配成功 返回对象

匹配失败 返回None

只匹配一次

和match的区别 只要字符串中包含就可以

(3) re.findall(pattern,string,flags) 匹配多次

pattern:正则表达式

string: 要匹配的字符串的内容

flags: 修正符

返回结果:
匹配成功返回装有数据的列表
匹配失败返回空列表

(4) re.finditer() 将查询结果变成迭代器进行返回 配合next方法进行操作

next(re.finditer())

(5) re.sub/re.subn 正则替换 返回匹配的次数/不返回匹配的次数

sub(pattern, repl, string, count=0, flags=0)
subn(pattern, repl, string, count=0, flags=0)
 

(6) re.split 正则拆分

split(pattern, string, maxsplit=0, flags=0):
 

(7) re.compile(pattern,flags) 编译成正则表达式 可以多次使用

将正则和函数分开使用 提高执行效率 正则表达式 可以多次使用

使用方法

pattern = re.compile("pattern",flags)

pattern.函数名(匹配的字符串)

修正符

re.I(re.IGNORECASE)

re.S(re.DOTALL)

re.M(re.MULTILINE)

python 基础(十四) 正则表达式的更多相关文章

  1. python学习(十四)正则表达式

    原文链接 ## 什么是正则表达式`正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符.及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑 ...

  2. python基础十四之匿名函数

    匿名函数 处理简单问题的简化函数,关键字lambda. # 格式:函数名 = lambda 参数:返回值 anonymity = lambda s: s ** 0.5 print(anonymity( ...

  3. Python 基础语法(四)

    Python 基础语法(四) --------------------------------------------接 Python 基础语法(三)------------------------- ...

  4. Python第十四天 序列化 pickle模块 cPickle模块 JSON模块 API的两种格式

    Python第十四天 序列化  pickle模块  cPickle模块  JSON模块  API的两种格式 目录 Pycharm使用技巧(转载) Python第一天  安装  shell  文件 Py ...

  5. 孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘

    孤荷凌寒自学python第二十四天python类中隐藏的私有方法探秘 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天发现了python的类中隐藏着一些特殊的私有方法. 这些私有方法不管我 ...

  6. 孤荷凌寒自学python第十四天python代码的书写规范与条件语句及判断条件式

    孤荷凌寒自学python第十四天python代码的书写规范与条件语句及判断条件式 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 在我学习过的所有语言中,对VB系的语言比较喜欢,而对C系和J系 ...

  7. Bootstrap<基础十四> 按钮下拉菜单

    使用 Bootstrap class 向按钮添加下拉菜单.如需向按钮添加下拉菜单,只需要简单地在在一个 .btn-group 中放置按钮和下拉菜单即可.也可以使用 <span class=&qu ...

  8. 初学 Python(十四)——生成器

    初学 Python(十四)--生成器 初学 Python,主要整理一些学习到的知识点,这次是生成器. # -*- coding:utf-8 -*- ''''' 生成式的作用: 减少内存占有,不用一次性 ...

  9. Python第二十四天 binascii模块

    Python第二十四天 binascii模块 binascii用来进行进制和字符串之间的转换 import binascii s = 'abcde' h = binascii.b2a_hex(s) # ...

随机推荐

  1. 关于oracle批量插入数据遇到的问题

    截取部分日志信息: 2015-09-01 14:48:47,132 INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReade ...

  2. HDU3183 A Magic Lamp —— 贪心(单调队列优化)/ RMQ / 线段树

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3183 题解: 方法一:贪心. 在草稿纸上试多几次可以知道,删除数字中从左到右最后一位递增(可以等于)的 ...

  3. java HttpClient GET请求

    HttpClient GET请求小实例,先简单记录下. package com.httpclientget; import java.io.IOException; import org.apache ...

  4. java-线程(一)

    1.进程与线程的区别 多个进程的内部数据和状态都是完全独立的,而多个线程是共享一块内存空间和一组系统资源,有可能互相影响.多线程程序比多进程程序需要更少的管理费用.进程是重量级的任务,需要分配他们的单 ...

  5. python中元组tuple

    python中列表(list)和元组(tuple)有很多相似的地方,它们都是容器,由一系列的对象构成,都可以包含任意类型的元素,甚至是一个序列.   list和tuple的不同首先体现在写法上: li ...

  6. Spring 事务管理高级应用难点剖析: 第 3 部分

    本文是“Spring 事务管理高级应用难点剖析” 系列文章的第 3 部分,作者将继续深入剖析在实际 Spring 事务管理应用中容易遇见的一些难点,包括在使用 Spring JDBC 时如果直接获取 ...

  7. P1816 忠诚

    题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了 ...

  8. Azure Key Vault (2) 使用Azure Portal创建和查看Azure Key Vault

    <Windows Azure Platform 系列文章目录> 请注意: 文本仅简单介绍如何在Azure Portal创建和创建Key Vault,如果需要结合Application做二次 ...

  9. CS231n 2016 通关 第五、六章 Fully-Connected Neural Nets 作业

    要求:实现任意层数的NN. 每一层结构包含: 1.前向传播和反向传播函数:2.每一层计算的相关数值 cell 1 依旧是显示的初始设置 # As usual, a bit of setup impor ...

  10. 再谈使用X.PagedList.Mvc 分页(ASP.NET Core 2.1)

    在以前的博文中写过使用X.PagedList.Mvc组件来对ASP.NET MVC应用程序进行分页,可以参考此篇随笔:Asp.net MVC 使用PagedList(新的已更名 为X.PagedLis ...