一、re模块与正则表达式之间的关系

  正则表达式不是python独有的,它是一门独立的技术

  所有的编程语言都可以使用正则

  但是如果你想在python中使用,你就必须依赖于re模块

正则的官方定义:正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定的字符、以及这些特定字符的组合,组成一个‘规则字符串’,这个‘规则字符串’用来表达对字符串的一种过滤逻辑。

简单来说:正则就是用来筛选字符串中特定的内容。如果一个位置的值,不会出现变化,那么就不需要用到正则了,我们需要考虑的是在同一个位置上可能会出现的所有可能的字符。

二、正则表达式

  1.字符组:[字符组]

    在同一个位置可能出现的各种字符组成了一个字符组,在正则表达式中用[]表示

    字符分为很多类,比如数字、字母、标点等等

    一个字符串里面的表达式都是或的关系    [0-9x]:表示的0-9的数字或者字母x

  2.字符(元字符):元字符包括以下这些,把框起来的当一组记忆  

    元字符需要注意的几点:

    1.^和$连用会精确限制匹配的内容,两者中间写什么,匹配的字符串就是什么,不能多一个也不能少一个

    2.abc|ab  匹配时候字符串长的一定要先放在前面

     3.^直接写在外面,是限制字符串的开头。$限制字符串的结尾

    4.[^]表示除了[]里面的字符,其他的字符都要

    5.分组()当多个正则符号需要多次重复的时候或者当做一个整体进行其他操作,那么可以以分组的形式

      

  3.量词

  

    量词需要注意的几点:

    1.量词必须跟在正则符号的后面,量词只能够限制紧挨着它的那一个正则符号(记住是只能够限制紧挨着的)

1.#正则表达式
海.*
#需要筛选的字符
海燕啊海娇海东
#结果
海燕啊海娇海东 (.代表除了换行符之外的所有字符,*是重复多次,所以把所有结果都取出来了,贪婪模式) 2.#正则表达式
海.*?
#需要筛选的字符
海燕啊海娇海东
#结果


海 (只匹配出三个海字,*?表示查找0次,作用于紧挨着的. 所以这个. 就当没有匹配)

    2.正则在匹配的时候默认是贪婪匹配(尽可能多的匹配),你可以在量词后面加一个?就可以变成非贪婪匹配

     *?表示匹配0次,+?表示匹配1次,??表示匹配0次

例题:

. ^ $

* + ? {}

字符集   []  [^]     ([^..]也算一个占位)

分组()    或 |

转义符   \

贪婪匹配和非贪婪匹配

三、re模块的用法

  三个需要掌握的方法

  re.findall   (找出字符串中符合正则表达式全部内容,并且返回的是一个列表,列表中的元素就是正则匹配的结果)

import re

ret = re.findall('a', 'eva egon yuan')  # 返回所有满足匹配条件的结果,放在列表里
print(ret) #没有找到返回空列表 #结果 ['a', 'a']

  re.search  (返回的是一个对象,必须要用group()调用才会返回结果,一个group()返回一个结果)

  注意:search只会根据正则查找一次,查到了结果就会停止查找,如果当查找结果不存在的情况下调用group会直接报错

import re
res = re.search('a','eva egon jason')
print(res) # search不会给你直接返回匹配到的结果 而是给你返回一个对象,找不到返回None
print(res.group()) # 必须调用group才能看到匹配到的结果 #结果 a 只会返回一个结果

  re.match    (match只会匹配字符串的开头部分,下面这个题是e开头,但是正则找的是a,返回一个None)

  注意:match只会匹配开头部分,找到了就返回一个对象然后用group获取,如果没找到就返回一个None

import re
res = re.match('a','eva egon jason')
print(res) #None
print(res.group()) #报错

  其他方法

  re.split  (切割)

import re
ret = re.split('[ab]', 'abcd') # 先按'a'分割得到''和'bcd',在对''和'bcd'分别按'b'分割
print(ret) # ['', '', 'cd'] 返回的还是列表

  re.sub  (替换)

import re
ret = re.sub('\d', 'H', 'eva3egon4yuan4',1) # 将数字替换成'H',参数1表示只替换1个
# sub('正则表达式','新的内容','待替换的字符串',n)
"""
先按照正则表达式查找所有符合该表达式的内容 统一替换成'新的内容' 还可以通过n来控制替换的个数
"""
print(ret) # evaHegon4yuan4

  re.subn  (也是替换,但是返回结果不一样)

import re
ret = re.subn('\d', 'H', 'eva3egon4yuan4') # 将数字替换成'H',返回元组(替换的结果,替换了多少次)
ret1 = re.subn('\d', 'H', 'eva3egon4yuan4',1) # 将数字替换成'H',返回元组(替换的结果,替换了多少次)
print(ret)
#('evaHegonHyuanH', 3) # 返回的是一个元组 元组的第二个元素代表的是替换的个数

  re.compile   (把一个正则表达式编译成一个正则表达式对象)

import re
obj = re.compile('\d{3}') #将正则表达式编译成为一个 正则表达式对象,规则要匹配的是3个数字
ret = obj.search('abc123eeee') #正则表达式对象调用search,参数为待匹配的字符串
res1 = obj.findall('')
print(ret) #结果是一个对象
print(ret.group()) #结果 : 123
print(res1) #结果 : ['347', '982', '734', '729', '349', '827', '384']

  re.finditer   (返回一个迭代器,用next+group取值)

import re
ret = re.finditer('\d', 'ds3sy4784a') #finditer返回一个存放匹配结果的迭代器
print(ret) # <callable_iterator object at 0x10195f940>
print(next(ret).group()) #查看第一个结果
print(next(ret).group()) #查看第二个结果
print([i.group() for i in ret]) #查看剩余的左右结果

  分组优先机制:()在python  re 模块中的应用

import re
res = re.search('^[1-9]\d{14}(\d{2}[0-9x])?$','')
print(res.group())
print(res.group(1)) # 获取正则表达式括号阔起来分组的内容 获取第一个括号的结果
print(res.group(2)) #获取第二个括号的结果

# 而针对findall它没有group取值的方法,所以它默认就是分组优先获取的结果
ret = re.findall('www.(baidu|oldboy).com', 'www.oldboy.com')
print(ret) # ['oldboy'] 这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可


ret = re.findall('www.(?:baidu|oldboy).com', 'www.oldboy.com') # ?:取消分组优先
print(ret) # ['www.oldboy.com']

split中()的用法

ret=re.split("\d+","eva3egon4yuan")
print(ret) #结果 : ['eva', 'egon', 'yuan'] ret1=re.split("(\d+)","eva3egon4yuan")
print(ret1) #结果 : ['eva', '3', 'egon', '4', 'yuan']

  给正则表达式取别名   (?P)

import re
res = re.search('^[1-9](?P<password>\d{14})(?P<username>\d{2}[0-9x])?$','') print(res.group('password')) # print(res.group('username')) #

2019-7-17 正则表达式和re模块的更多相关文章

  1. day15_7.17正则表达式与re模块

    一.正则表达式 在用户登录注册,以及身份验证时,会发现,如果在手机号的窗口输入字母等不是手机号的格式的字符串时,会报错,这种筛选字符串的功能就是由正则表达式提供. 正则表达式是几乎所有编程语言都会设计 ...

  2. 7.17 正则表达式 re模块

    在介绍正则表达式和re模块之前,先简要介绍一下 正则表达式与re模块的关系 1.正则表达式是一门独立的技术,任何语言均可使用 2.python中要想使用正则表达式需要通过re模块 正则表达式 元字符 ...

  3. 【Python爬虫】正则表达式与re模块

    正则表达式与re模块 阅读目录 在线正则表达式测试 常见匹配模式 re.match re.search re.findall re.compile 实战练习 在线正则表达式测试 http://tool ...

  4. python正则表达式之re模块方法介绍

    python正则表达式之re模块其他方法 1:search(pattern,string,flags=0) 在一个字符串中查找匹配 2:findall(pattern,string,flags=0) ...

  5. Python之正则表达式(re模块)

    本节内容 re模块介绍 使用re模块的步骤 re模块简单应用示例 关于匹配对象的说明 说说正则表达式字符串前的r前缀 re模块综合应用实例 正则表达式(Regluar Expressions)又称规则 ...

  6. 【转】Python之正则表达式(re模块)

    [转]Python之正则表达式(re模块) 本节内容 re模块介绍 使用re模块的步骤 re模块简单应用示例 关于匹配对象的说明 说说正则表达式字符串前的r前缀 re模块综合应用实例 参考文档 提示: ...

  7. 2019/01/17 基于windows使用fabric将gitlab的文件远程同步到服务器(git)

    觉得django项目把本地更新push到gitlab,再执行fabric脚本从gitlab更新服务器项目挺方便的,当然从本地直接到服务器就比较灵活. 2019/01/17 基于windows使用fab ...

  8. 十七. Python基础(17)--正则表达式

    十七. Python基础(17)--正则表达式 1 ● 正则表达式 定义: Regular expressions are sets of symbols that you can use to cr ...

  9. Python与正则表达式[0] -> re 模块的正则表达式匹配

    正则表达式 / Regular Expression 目录 正则表达式模式 re 模块简介 使用正则表达式进行匹配 正则表达式RE(Regular Expression, Regexp, Regex) ...

  10. python 正则表达式re使用模块(match()、search()和compile())

    摘录 python核心编程 python的re模块允许多线程共享一个已编译的正则表达式对象,也支持命名子组.下表是常见的正则表达式属性: 函数/方法 描述 仅仅是re模块函数 compile(patt ...

随机推荐

  1. haproxy 2.0 dataplaneapi rest api 转为graphql docker 镜像

    为了方便直接使用haproxy dataplaneapi graphql 格式的查询,制作了一个简单的docker 镜像 基于dotenv 进行配置管理,可以直接通过环境变量传入参数,处理不同hapr ...

  2. JS的ES6的Symbol

    一.Symbol 1.什么是Symbol: Symbol是ES6新添加的原始类型(ES5已有原始数据类型:String,Number,boolean,function,undefined,object ...

  3. x64汇编第四讲,c / C++中调用x64汇编

    目录 x64汇编第四讲,c / C++中调用x64汇编 一丶简介 1.说明 二丶C/C++调用 asm64.asm函数. 1.配置asm参与生成 2.给Asm文件添加函数代码 3.C/C++调用asm ...

  4. 【AtCoder】 ARC 097

    link C-K-th Substring 题意:找出已知串中第\(k\)大的子串,子串相同的不算 \(k\)好小啊,要怎么做啊 不是[Tjoi2015]弦论吗 算了,直接SAM吧 #include& ...

  5. IDE 问题及解决

    目录 Eclipse 篇 1.MarketPlace 打不开,对话框闪退 2.使用 lombok ,预编译不通过 3.Eclipse + PyDev - > Unresolved import: ...

  6. Fluent瞬态结果导出为Ensight格式

    参考: (1)<ANSYS Fluent User's Guide>的3.13.9. EnSight Case Gold Files (2)https://support.ceisoftw ...

  7. Zabbix实战-简易教程--中间件kafka监控

    一.环境准备 1.安装kafka Step 1: 下载代码 你可以登录Apache kafka 官方下载.http://kafka.apache.org/downloads.html备注:2.11-1 ...

  8. 面试问烂的 MySQL 四种隔离级别,看完吊打面试官!

    阅读本文大概需要 5.6 分钟. 来源:网络 什么是事务 事务是应用程序中一系列严密的操作,所有操作必须成功完成,否则在每个操作中所作的所有更改都会被撤消.也就是事务具有原子性,一个事务中的一系列的操 ...

  9. [Gamma]Scrum Meeting#1

    github 本次会议项目由PM召开,时间为5月26日晚上10点30分 时长25分钟 任务表格 人员 昨日工作 下一步工作 木鬼 撰写博客,组织例会 swoip 前端显示屏幕,翻译坐标 bhlt 后端 ...

  10. 【C++】C++的拷贝控制

    目录结构: contents structure [-] 拷贝.赋值与销毁 拷贝构造函数 拷贝初始化 参数和返回值 拷贝赋值运算符 析构函数 三五法则 拷贝控制和资源管理 交换操作 对象移动 右值引用 ...