1. 简介

正则表达式本身是一种小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配。正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行。

2. 常用字符

普通字符

abc

匹配自身

abc

abc

元字符

.

匹配除换行符之外的任意字符

a.c

abc

 

\

转义字符,使后一个字符改变原来的意思

a\.c

a.c

 

*

匹配前一个字符0或多次

abc*

ab,abc

 

+

匹配前一个字符1或多次

abc+

abc,abcc

 

?

匹配其前面的一个字符出现0-1次

abc?

ab,abc

 

^

匹配字符串开头。在多行模式中匹配每一行的开头

^abc

abc

 

$

匹配字符串末尾,在多行模式中匹配每一行的末尾

abc$

abc

 

|

或关系,匹配|左右表达式任意一个,从左到右匹配,如果|没有包括在()中,则它的范围是整个正则表达式

abc|def

abcdef

 

{}

{m}匹配前一个字符m次,{m,n}匹配前一个字符m至n次,若省略n,则匹配m至无限次

ab{1,2}c

abc

abbc

 

[]

字符集。对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c]。[^abc]表示取反,即非abc。

所有特殊字符在字符集中都失去其原有的特殊含义。用\反斜杠转义恢复特殊字符的特殊含义。

a[bcd]e

abe

ace

ade

 

()

被括起来的表达式将作为分组,从表达式左边开始每遇到一个分组的左括号“(”,编号+1.

分组表达式作为一个整体,可以后接数量词。表达式中的|仅在该组中有效。

(abc){2}

a(123|456)c

abcabc

a456c

python中反斜杠\作用:

反斜杠后边跟元字符去除特殊功能;(即将特殊字符转义成普通字符)

反斜杠后边跟普通字符实现特殊功能;(即预定义字符

引用序号对应的字组所匹配的字符串

1
2
3
>>>a=re.search(r'(tina)(fei)haha\2','tinafeihahafeitinafeihahatina').group()
>>> print(a)
tinafeihahafei

3. 预定义字符(可以在字符集[]中匹配)

字符集

释义

列举

Result

\d

任何十进制数字;[0-9]

a\bc

a1c

\D

非数字:[^\d]

a\Dc

abc

\s

匹配任何空白字符:[<空格>\t\r\n\f\v]

a\sc

a c

\S

非空白字符:[^\s]

a\Sc

abc

\w

匹配包括下划线在内的任何字符:[A-Za-z0-9_]

a\wc

abc

\W

匹配非字母数字字符: [^a-zA-Z0-9],即匹配特殊字符

a\Wc

a c

\b

匹配\w和\W之间,即匹配单词边界匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'

\babc\b

a\b!bc

空格abc空格

a!bc

\B

[^\b]

a\Bbc

abc

\A

仅匹配字符串开头,同^

\Aabc

abc

\z

仅匹配字符串结尾,同$

abc\Z

abc

4. 特殊分组用法

(?P<name>)

分组,除了原有的编号外再指定一个额外的别名

(?P<id>abc){2}

abcabc

(?P=name)

引用别名为<name>的分组匹配到字符串

(?P<id>\d)abc(?P=id)

1abc1

5abc5

\<number>

引用编号为<number>的分组匹配到字符串

(\d)abc\1

1abc1

5abc5

5. re模块功能函数

a.compile()

编译正则表达式模式,返回一个对象的模式。(即把常用的正则表达式编译成正则表达式对象)

re.compile(pattern,flags=0)

pattern  编译时用的表达式字符串。

flags  编译标志位,用于修改正则表达式的匹配方式,如:是否区分大小写,行匹配等。

常用的flags有:

标志

含义

re.S(DOTALL)

使.匹配包括换行在内的所有字符

re.I(IGNORECASE)

使匹配对大小写不敏感

re.L(LOCALE)

做本地化识别(locale-aware)匹配,法语等

re.M(MULTILINE)

多行匹配,影响^和$

re.X(VERBOSE)

该标志通过给予更灵活的格式以便将正则表达式写得更易于理解

re.U

根据Unicode字符集解析字符,这个标志影响\w,\W,\b,\B

b.match()

只匹配起始位置(起始位置是否可以匹配成功),匹配单个(匹配成功返回一个对象,未匹配成功返回None)

match(pattern, string, flags=0)

pattern: 正则模型

string : 要匹配的字符串

falgs : 匹配模式

1
2
3
4
5
print(re.match('com','comwww.runcomoob').group())
print(re.match('com','Comwww.runcomoob',re.I).group())
执行结果如下:
com
com    

分组, 提取匹配成功的指定内容(先匹配成功全部正则,再匹配成功的局部内容提取出来)

r =re.match("h(\w+).*(?P<name>\d)$", origin)

print(r.group())     # 获取匹配到的所有结果

print(r.groups())    # 获取模型中匹配到的分组结果

print(r.groupdict()) # 获取模型中匹配到的分组中所有执行了key的组

c.search()

re.search函数会在字符串内查找模式匹配,只要找到第一个匹配然后返回,如果字符串没有匹配,则返回None。

re.search(pattern, string, flags=0)

1
2
3
print(re.search('\dcom','www.4comrunoob.5com').group())
执行结果如下:
4com

*注:match和search一旦匹配成功,就是一个match object对象,而match object对象有以下方法:

group()返回被 RE 匹配的字符串

start() 返回匹配开始的位置

end() 返回匹配结束的位置

span() 返回一个元组包含匹配 (开始,结束) 的位置

group() 返回re整体匹配的字符串,可以一次输入多个组号,对应组号匹配的字符串。

d.findall()

re.findall遍历匹配,可以获取字符串中所有匹配的字符串,返回一个列表

获取非重复的匹配列表;如果有一个组则以列表形式返回,且每一个匹配均是字符串;如果模型中有多个组,则以列表形式返回,且每一个匹配均是元祖;

空的匹配也会包含在结果中

注意:re. finditer(pattern, string, flags=0) 迭代一次一次去取数据

e.re.split()

split 根据正则匹配分割字符串

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

pattern: 正则模型

string : 要匹配的字符串

maxsplit:指定分割次数

flags : 匹配模式

分组后分割

f.re.sub()  替换匹配成功的指定位置字符串

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

pattern: 正则模型

repl   : 要替换的字符串或可执行对象

string: 要匹配的字符串

count  : 指定匹配个数

flags  : 匹配模式

re.subn()  返回成功的指定位置字符串以及替换的次数

6、贪婪匹配与非贪婪匹配

*,+,?等都是贪婪匹配,也就是尽可能匹配,后面加?号使其变成非贪婪匹配

Python全栈开发day6的更多相关文章

  1. python全栈开发-Day6 字符编码

    python全栈开发-Day6 字符编码 一 .了解字符编码的知识储备 一 .计算机基础知识 二 .文本编辑器存取文件的原理(nodepad++,pycharm,word) #1.打开编辑器就打开了启 ...

  2. Python全栈开发【面向对象进阶】

    Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...

  3. Python全栈开发【面向对象】

    Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...

  4. Python全栈开发【模块】

    Python全栈开发[模块] 本节内容: 模块介绍 time random os sys json & picle shelve XML hashlib ConfigParser loggin ...

  5. Python全栈开发【基础四】

    Python全栈开发[基础四] 本节内容: 匿名函数(lambda) 函数式编程(map,filter,reduce) 文件处理 迭代器 三元表达式 列表解析与生成器表达式 生成器 匿名函数 lamb ...

  6. Python全栈开发【基础三】

    Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 内置函数 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 def 函数名(参数): ... 函数体 . ...

  7. Python全栈开发【基础二】

    Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 其他(编码,range,f ...

  8. Python全栈开发【基础一】

    Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与wh ...

  9. python 全栈开发之路 day1

    python 全栈开发之路 day1   本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...

随机推荐

  1. 监控服务 - Nagios配置文件详解

    Nagios的配置文件: Nagios安装后有四种默认的配置文件:主配置文件.CGI配置文件.资源定义文件.对象定义文件.这些配置文件间具有一些关系,只有充分理解各配置文件,才能使得配置Nagios服 ...

  2. 经典Linq实例语句

    从技术角度而言,LINQ定义了大约40个查询操作符,如select.from.in.where以及order by(C#中).使用这些操作符可以编写查询语句.不过,这些查询还可以基于很多类型的数据,每 ...

  3. Python DES 加密解密,就是大家所谓想要的那个非常快速的方法

    这个要借助Crypto.Cipher这个插件来实现的,引用后只需要写如下代码即可 from Crypto.Cipher import DES class MyDESCrypt: key = chr(1 ...

  4. 跨平台编程:关于VS和QT那些事

    1.Win平台 Qt5.7 for Win32 (VS2013) 编辑器:Qt Creator 4.0 编译器:MSVC12 for X86 (cl.exe&link.exe) 调试器:CDB ...

  5. Combobox

    1.方式一 <select id="cc" class="easyui-combobox" name="dept" style=&qu ...

  6. 基于jFinal建立简单的服务端-接收请求并返回指定内容

    本菜鸡是一名弱弱的测试工程师,最近完成了一个支付相关的项目,项目工作中,需要建立一个模拟支付宝的网关,主要是接收请求并返回数据.作为一名没有丝毫开发经验的菜鸡,初期入门相当费劲,主要还是思维上的转变. ...

  7. flex acionscript png图片去除多余空白,生成合适大小图片

    //最小矩形(非透明最小区域) public static function getMinRect(target:BitmapData):Rectangle{   return target.getC ...

  8. 解决window2012 IIS8 配置的网站无法下载exe文件的问题

    window2012 IIS8 配置网站下载exe文件.解决window2012 IIS8 配置的网站无法下载exe文件的问题 配置好网站后,无法下载网站上的exe文件,zip文件确可以下载的.右键点 ...

  9. 在网页中怎样给已发布的Flash添加链接的方法(zhuan)

    因为网页中的 Flash 是以控件形式出现的,优先级别较高,所以直接对它加链接是无效的,不过可以用按钮控件 BUTTON 来实现. 具体步骤 1.直接在按钮上加上onClick事件打开指定页面: &l ...

  10. <select> 标签使用

    jQuery获取Select选择的Text和Value: 1. var checkText=jQuery("#select_id").find("option:selec ...