Python全栈开发day6
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的更多相关文章
- python全栈开发-Day6 字符编码
python全栈开发-Day6 字符编码 一 .了解字符编码的知识储备 一 .计算机基础知识 二 .文本编辑器存取文件的原理(nodepad++,pycharm,word) #1.打开编辑器就打开了启 ...
- Python全栈开发【面向对象进阶】
Python全栈开发[面向对象进阶] 本节内容: isinstance(obj,cls)和issubclass(sub,super) 反射 __setattr__,__delattr__,__geta ...
- Python全栈开发【面向对象】
Python全栈开发[面向对象] 本节内容: 三大编程范式 面向对象设计与面向对象编程 类和对象 静态属性.类方法.静态方法 类组合 继承 多态 封装 三大编程范式 三大编程范式: 1.面向过程编程 ...
- Python全栈开发【模块】
Python全栈开发[模块] 本节内容: 模块介绍 time random os sys json & picle shelve XML hashlib ConfigParser loggin ...
- Python全栈开发【基础四】
Python全栈开发[基础四] 本节内容: 匿名函数(lambda) 函数式编程(map,filter,reduce) 文件处理 迭代器 三元表达式 列表解析与生成器表达式 生成器 匿名函数 lamb ...
- Python全栈开发【基础三】
Python全栈开发[基础三] 本节内容: 函数(全局与局部变量) 递归 内置函数 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 def 函数名(参数): ... 函数体 . ...
- Python全栈开发【基础二】
Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 其他(编码,range,f ...
- Python全栈开发【基础一】
Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与wh ...
- python 全栈开发之路 day1
python 全栈开发之路 day1 本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可 ...
随机推荐
- 远程桌面不能连接,提示awgina.dll取代错误的解决办法
远程桌面不能连接,错误提示:您不能初始化一个远程桌面连接,因为在远程计算机上的windows登录软件被不兼容的软件c:\windows\system32\awgina.dll取代,如下图所示: 原因: ...
- git学习:多人协作,标签管理
多人协作: 查看远程库的信息, git remote 推送分支到远程库 git push origin master/dev 注意:master是主分支,时刻需要与远程同步 dev是开发分支,也需要与 ...
- 关于Android 打开新的Activity 虚拟键盘的弹出与不弹出
关于Android 打开新的Activity 虚拟键盘的弹出与不弹出 打开Activity 时 在相应的情况 弹出虚拟键盘 或者 隐藏虚拟键盘 会给用户非常好的用户体验 , 实现起来也比较简单 只需 ...
- 序列化Image到byte[]
using System.Runtime.Serialization.Formatters.Binary; //引入供序列化Image对象使用 /// <summary>/// 将byte ...
- oracle kill session
kill session 是DBA经常碰到的事情之一.如果kill 掉了不该kill 的session,则具有破坏性,因此尽可能的避免这样的错误发生.同时也应当注意,如果kill 的session属于 ...
- Python基础篇【第3篇】: Python异常处理、反射、动态导入、利用反射的web框架
异常处理 什么是异常? 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行. 一般情况下,在Python无法正常处理程序时就会发生一个异常.异常是Python对象,表示一个错误.当P ...
- 增强VPS SSH账号安全:改端口,禁用Root,密钥登录,Denyhosts防暴力攻击
VPS SSH账号是我们日常管理VPS的主要登入方式,尤其是Root账号,对Linux系统安全至关重要.以前好多站长喜欢用Putty中文版,这实际是别人修改官方Putty汉化而来,这些软件被植入了后门 ...
- w3svc服务启动 不了,错误 1068:依赖服务或组件无法启动
win10系统,装了iis就是启动不了,报错误 1068:依赖服务或组件无法启动. 各种实验无法使用,最后如下方法解决 运行命令regedit,打开注册表编辑器,进入:HKEY_LOCAL_MACHI ...
- Unix 用gdb分析core dump文件
产生core文件条件 用ulimit -c 指定core文件大小来开启core文件的生成,如:ulimit -c unlimited 用gdb分析core文件的条件 可执行程序在编译时,需加入-g参数 ...
- ubuntu 13.10 mono asp.net服务 安装
ubuntu 13.10 从官方文档http://www.mono-project.com/Mod_mono 可看到 Mod_Mono is an Apache 2.0/2.2/2.4.3 modul ...