re模块(正则表达式)

  • 就其本质而言,正则表达式是一种小型的、高度专业化的编程语言
  • 在Python中(它内嵌在python中),并通过re模块来实现,正则表达式被编译成一系列的字节码,然后由C编写的匹配引擎执行

正则:模糊匹配(针对字符串的一些操作),匹配的是这些元素的共性

字符匹配(普通字符,元字符)

1.普通字符:大多数字符和字母都会和自身匹配

import re
print(re.findall('alex', 'aabuscdalexduye')) #执行结果:
['alex']

2.元字符: . ^ * + ? {} [] | () \

.   通配符(除了换行符\n),一个点代表一个字符

import re
print(re.findall('a.x', 'a0xuscdaexduayx'))
print(re.findall('a..x', 'a01xuscdabexduayx'))
print(re.findall('a...x', 'a01xuscdabexduayx')) #执行结果:
['a0x', 'aex', 'ayx']
['a01x', 'abex']
[]

^ 在字符串的开头进行内容匹配

import re
print(re.findall('a.x', 'awxuscdaexduayx'))
print(re.findall('^a.x', 'awxuscdaexduayx'))
print(re.findall('^a.x', 'axuscdaexduayx')) #执行结果:
['awx', 'aex', 'ayx']
['awx']
[]

$ 在字符串的结尾进行内容匹配

import re
print(re.findall('a.x', 'awxuscdaexduayx'))
print(re.findall('a.x$', 'awxuscdaexduayx'))
print(re.findall('a.x$', 'axuscdaexduax')) #执行结果:
['awx', 'aex', 'ayx']
['ayx']
[]

重复符号:* + ? {}

* 代表 [0,∞)
+ 代表 [1, ∞]

import re
print(re.findall('alex*', 'aledhabeafaalexxg')) #x的个数大于等于0便可以进行匹配
print(re.findall('alex+', 'aledhabeafaalexxg')) #x的个数大于等于1便可以进行匹配 #执行结果:
['ale', 'alexx']
['alexx']

? 代表 [0, 1]

import re
print(re.findall('alex?', 'aledhabeafaalexxg')) #x的个数等于0或者1便可以进行匹配 #执行结果:
['ale', 'alex']

{} 可以表示任何范围
{0,} ==> *
{1,} ==> +
{0,1} ==> ?

import re
print(re.findall('alex{0,}', 'aledhabeafaalexxg'))
print(re.findall('alex{1,}', 'aledhabeafaalexxg'))
print(re.findall('alex{0,1}', 'aledhabeafaalexxg')) #执行结果:
['ale', 'alexx']
['alexx']
['ale', 'alex']

#注意:* + ?等是贪婪匹配,也就是尽可能匹配,后面加?使其变成惰性匹配(所谓惰性匹配,是指最少匹配)

import re
print(re.findall('alex*', 'aledhabeafaalexxg')) #x大于等于0便可以匹配
print(re.findall('alex*?', 'aledhabeafaalexxg')) #x等于0匹配
print(re.findall('alex+', 'alexxxdhalebeafaalexxg')) #x大于等于1便可以匹配
print(re.findall('alex+?', 'alexxxdhalebeafaalexxg')) #x等于1匹配
print(re.findall('alex?', 'aledhabeafalexaalexxg')) #x等于0或者1可以匹配
print(re.findall('alex??', 'aledhabeafalexaalexxg')) #x等于0匹配 #执行结果:
['ale', 'alexx']
['ale', 'ale']
['alexxx', 'alexx']
['alex', 'alex']
['ale', 'alex', 'alex']
['ale', 'ale', 'ale']

[] 字符集:在字符集中,没有特殊符号(在字符集里有功能的符号:- ^ \)

import re
print(re.findall('x[yz]c', 'xycssxcxzc')) #出现在字符集中的字符是或的关系 #执行结果:
['xyc', 'xzc']
import re
print(re.findall('x[z*]c', 'x*cssxcxzzc')) #在字符集中,*没有特殊含义,只代表一个字符而已 #执行结果:
['x*c']

在字符集里有功能的符号:- 代表的意思是范围

import re
import re
print(re.findall('x[abcdef]x','bamxadxbxaaxcxmm'))
print(re.findall('x[a-f]x','bamxadxbxaaxcxmm'))
print(re.findall('x[a-f]*x','xbamxadxbxaaxcxmmx')) #执行结果:
['xbx', 'xcx']
['xbx', 'xcx']
['xadx', 'xaax']

在字符集里有功能的符号:^ 代表的意思是非

import re
print(re.findall('x[a-z]x','bamxaxbx1xcxmm'))
print(re.findall('x[^a-z]x','bamxaxbx1xcxmm')) #执行结果:
['xax', 'xcx']
['x1x']

在字符集里有功能的符号: \

  • \后边跟元字符为去除特殊功能,比如\.
  • \后边跟普通字符为实现特殊功能,比如\d
    • \d 匹配任何十进制数,它相当于类[0-9]
    • \D 匹配任何非数字字符,它相当于类[^0-9]
    • \s 匹配任何空白字符,它相当于类[\t\n\r\f\v]
    • \S 匹配任何非空白字符,它相当于类[^\t\n\r\f\v]
    • \w 匹配任何字母数字字符,它相当于类[a-zA-Z0-9]
    • \W 匹配任何非字母数字字符,它相当于类[a-zA-Z0-9]
    • \b 匹配一个特殊字符边界,比如空格,&,#等

python(33)——【re模块】的更多相关文章

  1. python使用xlrd模块读写Excel文件的方法

    本文实例讲述了python使用xlrd模块读写Excel文件的方法.分享给大家供大家参考.具体如下: 一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi ...

  2. python解析xml模块封装代码

    在python中解析xml文件的模块用法,以及对模块封装的方法.原文转自:http://www.jbxue.com/article/16586.html 有如下的xml文件:<?xml vers ...

  3. python中string模块各属性以及函数的用法

    任何语言都离不开字符,那就会涉及对字符的操作,尤其是脚本语言更是频繁,不管是生产环境还是面试考验都要面对字符串的操作.     python的字符串操作通过2部分的方法函数基本上就可以解决所有的字符串 ...

  4. 【Python之路】第六篇--Python基础之模块

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  5. Python中re模块的使用

    #table-1 thead,#table-1 tr { border-top-width: 1px; border-top-style: solid; border-top-color: rgb(2 ...

  6. Python 中包/模块的 `import` 操作

    版权声明:博客为作者原创,允许转载,但必须注明原文地址: https://www.cnblogs.com/byronxie/p/10745292.html 用实例来说明 import 的作用吧. 创建 ...

  7. 周末班:Python基础之模块

    什么是模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写 ...

  8. 正则表达式与Python中re模块的使用

    正则表达式与Python中re模块的使用 最近做了点爬虫,正则表达式使用的非常多,用Python做的话会用到re模块. 本文总结一下正则表达式与re模块的基础与使用. 另外,给大家介绍一个在线测试正则 ...

  9. python的定时任务模块--schedule

    首先先安装一下模块 下面我们简单的学习一下schedule模块 先简单的看个示例 import schedule def test(*args,**kwargs): print("hello ...

  10. Python远程连接模块-Telnet

    Python远程连接模块-Telnet 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 虽然现在主流的python版本还是2.7,相信2020年python程序员都会偏向Python ...

随机推荐

  1. Java学习笔记(十五):import关键字

  2. Java 虚拟机概述

    虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的.Java虚拟机有自己完善的硬体架构,如处理器.堆栈.寄存器等,还具有相应的指令系统.Java虚拟机屏蔽了与具体操作系统平 ...

  3. MySQL 详细学习笔记

    Windows服务 -- 启动MySQL net start mysql -- 创建Windows服务 sc create mysql binPath= mysqld_bin_path(注意:等号与值 ...

  4. WIN10在loadrunner安装或path4插件安装时遇到的管理员阻止程序运行---解决方案(可用)

    方法1:关闭用户账户控制1.“win+x”进入控制面板,选择安全性与维护,在左侧更改windows smartscreen筛选器设置,选择"不执行任何操作",单击确定即可.2.“w ...

  5. 365. Water and Jug Problem量杯灌水问题

    [抄题]: 简而言之:只能对 杯子中全部的水/容量-杯子中全部的水进行操作 You are given two jugs with capacities x and y litres. There i ...

  6. -bash: ls: No such file or directory 产生的原因及修改方法

    ubuntu出现如下错误: { Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.15.0-42-generic x86_64) * Documentation: ...

  7. python 函数进阶与闭包

    函数的命名空间和作用域 引言 现在有个问题,函数里面的变量,在函数外面能直接引用么? def func1(): m = 1 print(m) print(m) #这行报的错 报错了: NameErro ...

  8. 15. pk-mext

    在平时的生产环境中,我们经常会碰到监控MySQL的各个状态值的一个变化趋势,然后就会自己写个脚本,将status快照保存到文本中.当我们去分析的时候,需要自己去比较差值,是一件比较麻烦的时候,虽然可以 ...

  9. (PMP)第9章-----项目资源管理

    9.1 规划资源管理 数据表现: 1.层级型(高层次的角色):工作分解结构,组织分解结构,资源分解结构 2.责任分配矩阵:RAM,RACI,执行,负责,咨询,知情(只有一个A) 3.文本型(记录详细职 ...

  10. tabel表格的dom操作

    对table表格的操作比较麻烦,一直字符串的连接会比较麻烦 var nod = cwgk_msg_list.insertRow();//这个是上边获取过的dom元素,一般是tbody的元素,对元素进行 ...