python3的正则表达式(regex)
正则表达式提供了一种紧凑的表示法,可用于表示字符串的组合,一个单独的正则表达式可以表示无限数量的字符串。常用的5种用途:分析、搜索、搜索与替代、字符串的分割、验证。
(一)正则表达式语言
python中特殊字符有 \.^$?+*{}[]()|
1、字符类速记
^ 如果在字符类中第一个字符则表示否定;
- 表示一个字符范围,如果作为字符类中的第一个字符,就表示一个字面意义上的连字符;
. 可以匹配除换行符之外的任意字符,或带re.DOTALL标记的任意字符,或匹配字符类内部的字面意义的字符;
\d 匹配一个Unicode数字,或带re.ASCII标记的[0-9];
\D 匹配一个Unicode非数字,或带re.ASCII标记的[^0-9];
\s 匹配Unicode空白,或带re.ASCII标记的[\t\n\r\f\v];
\S 匹配Unicode非空白,或带re.ASCII标记的[^\t\n\r\f\v];
\w 匹配一个Unicode单词字符,或带re.ASCII标记的[a-zA-Z0-9_];
\W 匹配一个Unicode非单词字符,或带re.ASCII标记的[^a-zA-Z0-9_]
2、量词
格式{m,n},m与n分别表示使用该量词的表达必须匹配的最少次数与最多次数。如果只给定一个数字则同时表示最小值最大值
量词速记形式:
e{m} 准确匹配表达式e的m次出现
e{m,} 贪婪地匹配表达式e至少m次出现
e{m,}? 非贪婪地匹配表达式e至少m次出现
e{,n} 最多n次出现
e{,n}? 贪婪
e? e{0,1}
e?? e{0,1}?
e+ e{1,}
e+? e{1,}?
e* e{0,}
e*? e{0,}?
[] 匹配[]内的任意一个内容
() 将()的内容作为一个整体来进行匹配
贪婪表示会尽可以多的匹配符合条件的字符,非贪婪则为尽可以少的匹配。
3、可用air(craft|plane)来匹配 aircraft和airplane。
使用air(?:craft|plane)可以用来限制当处于更多的嵌套中时,aricraft和airplane只有一次捕获。圆括号表示组。
4、\i反向引用,i表示前面的捕获号。捕获号也可以用在左圆括号前加 ?P<name>来用名称代替
如:(?P<key>\w+)=(?P<value>.+)对于捕获进行反向引用(?P=name): (?P<word>\w+)\s+(?P=word) 可以使用名为"word"的捕获来匹配重复的单词。
5、正则表达式断言:
^ 在起始处匹配,也可以在带MULTILINE标记的每个换行符后匹配;
$ 在结尾处匹配,也可以在带MULTILINE标记的每个换行符前匹配;
\A 在起始处匹配;
\b 在单词边界匹配,受re.ASCII影响,如果在字符内部则是backspace的转义字符;
\B 在非单词边界匹配,受re.ASCII影响;
\Z 在结尾处匹配;
(?=e) 如果表达式e在此断言处匹配,但没有超出此处——称为前瞻或正前瞻,则匹配;
(?!e) 如果表达式e在此断言处不匹配,但没有超出此处——称为负前瞻,则匹配;
(?<=e) 如果表达式e恰在本断言之前匹配——称为正回顾,则匹配;
(?<!e) 如果表达式e恰在本断言之前不匹配——称为负回顾,则匹配;
6、正则表达式的注释
可用(?#the comment)来实现,也可用re.VERBOSE标记。
(二)正则表达式模块
正则表达式模块标记:
re.A 或 re.ASCII
re.I 或 re.IGNORECASE 忽略大小写
re.M 或 re.MULTILINE 使^在起始处并在每个换行符后匹配,使$在结尾处但在每个换行符之前匹配
re.S 或 re.DOTALL 使.匹配每个字符,包括换行符
re.X 或 re.VERBOSE 使空白与注释包含在匹配中
正则表达式模块的函数(供查):
re.compile(r,f) 返回编译后的正则表达式r,如果指定,就将其标记设置为f(即上边的re.A等,且可同时有多个标记,用|分隔);(使用re'regex'的形式表达字符串可不用转义)
re.escape(s) 返回字符串s,其中所有非字母数字的字符都使用反斜线进行了转义处理,因此,返回的字符串中没有特殊的正则表达式字符;
re.findall(r,s,f) 返回正则表达式r在字符串s中所有非交叠的匹配(如果给定f,就受其制约)。如果正则表达式中有捕获,那么每次匹配都作为一个捕获元组返回;
re.finditer(r,s,f) 对正则表达式r在字符串s中每个非交叠的匹配(如果给定了f,就受其制约),都返回一个匹配对象;
re.match(r,s,f) 如果正则表达式r在字符串s的起始处匹配(如果给定f,就受其制约),就返回一个匹配对象(MatchObject),否则返回None;
re.search(r,s,f) 如果正则表达式r在字符串s的任意位置匹配(如果给定f,就受其制约),就返回一个匹配对象,否则返回None;
re.split(r,s,m) 返回分割字符串s(在正则表达式r每次出现处进行分割)所产生的字符串的列表,至多分割m次(如果没有给定m,就尽可能多的分割),如果正则表达式中包含捕获,就被包含在分割的部分之间;
re.sub(r,x,s,m) 对正则表达式r的每次匹配(如果给定m,那么至多m次),返回字符串s的一个副本,并将其替换为x--这可以是一个字符串,也可以是一个函数;
re.subn(r,x,s,m) 与re.sub()函数相同,区别在于此函数返回一个二元组;
匹配对象属性与方法:
m.end(g) 返回组g(如果给定)在文本匹配的终点索引位置,对组0,则表示整体匹配;如果匹配中不包含该组,就返回-1;
m.endpos 搜索的终点索引位置
m.expands(s) 返回字符串s,并将其中捕获标识用相应的捕获替代;
m.group(g,...) 返回编号的或命名的组g,如果给定的不止一个,就返回相应的捕获组成的元组;
m.groupdict(difault) 返回一个字典,其中存放所有命名的捕获组,组名作为键,捕获作为值;如果给定了default参数,就将其用作那些不参与匹配的捕获组的值;
m.groups(default) 返回包含所有捕获的元组,从1开始;如果给定default,就将其用作那此不参与匹配的捕获组的值;
m.lastgroup 匹配的、编号最高的捕获组的名称,如果不存在或没有使用名称,就返回None;
m.lastindex 匹配的、编号最高的捕获组的编号,如果没有就返回None;
m.pos 搜索的起始索引位置;
m.re 产生这一匹配对象的正则表达式对象;
m.span(g) 如果给定g,就返回组g在文本中匹配的起始索引位置与结尾位置;(对组0,则是整体匹配);如果该组不参与匹配,就返回(-1,-1);
m.start(g) 如果给定g,就返回组g在文本中匹配的起始索引位置(对组0,则是整体匹配);如果该组不参加匹配,就返回-1;
m.string 传递给match()或search()的字符串;
python3的正则表达式(regex)的更多相关文章
- C#正则表达式Regex常用匹配
使用Regex类需要引用命名空间:using System.Text.RegularExpressions; 利用Regex类实现验证 示例1:注释的代码所起的作用是相同的,不过一个是静态方法,一个是 ...
- C#正则表达式Regex类的用法
C#正则表达式Regex类的用法 更多2014/2/18 来源:C#学习浏览量:36891 学习标签: 正则表达式 Regex 本文导读:正则表达式的本质是使用一系列特殊字符模式,来表示某一类字符串, ...
- C#正则表达式Regex类
C#正则表达式Regex类的使用 C#中为正则表达式的使用提供了非常强大的功能,这就是Regex类.这个包包含于System.Text.RegularExpressions命名空间下面,而这个命名空间 ...
- (四)boost库之正则表达式regex
(四)boost库之正则表达式regex 正则表达式可以为我们带来极大的方便,有了它,再也不用为此烦恼 头文件: #include <boost/regex.hpp> 1.完全匹配 std ...
- boost 正则表达式 regex
boost 正则表达式 regex 环境安装 如果在引用boost regex出现连接错误,但是引用其他的库却没有这个错误,这是因为对于boost来说,是免编译的,但是,正则这个库 是需要单独编译 ...
- 请写出正则表达式(regex),取得下列黄色部分的字符串 TEL: 02-236-9655/9659 FAX:02-236-9654 (黄色部分即02-236-9655/9659 ) ( 测试面试题)
请写出正则表达式(regex),取得下列黄色部分的字符串 TEL: 02-236-9655/9659 FAX:02-236-9654 答: package test1; import java.uti ...
- Python 正则表达式(RegEx)
版权所有,未经许可,禁止转载 章节 Python 介绍 Python 开发环境搭建 Python 语法 Python 变量 Python 数值类型 Python 类型转换 Python 字符串(Str ...
- python3.5 正则表达式
我们平时上网的时候,经常需要在一些网站上注册帐号,而注册帐号的时候对帐号名称会有一些要求. 比如: 上面的图片中,输入的邮件地址.密码.手机号 才可以注册成功. 我们需要匹配用户输入的内容,判断用户输 ...
- C#正则表达式Regex类使用
作为文本处理的利器——Perl语言对正则表达式的最强大支持起到了重要的作用,正因为如此,许多其他语言在加入正则表达式引擎的时候都会或多或少的兼顾perl风格的正则表达式,开发出相应的引擎.本人使用pe ...
随机推荐
- 「CODVES 1922 」骑士共存问题(二分图的最大独立集|网络流)&dinic
首先是题目链接 http://codevs.cn/problem/1922/ 结果发现题目没图(心情复杂 然后去网上扒了一张图 大概就是这样了. 如果把每个点和它可以攻击的点连一条边,那问题就变成了 ...
- 浅谈一下web移动端基本
屏幕尺寸.屏幕分辨率.屏幕像素密度 屏幕尺寸: 指屏幕的对角线的长度,单位是英寸,1英寸=2.54厘米. 常见的屏幕尺寸有2.4.2.8.3.5.3.7.4.2.5.0.5.5.6.0等. 屏幕分辨率 ...
- Hadoop中Hbase的体系结构
HRegion 当一张表中的数据特别多的时候,HBase把表拆成多个块,每个块就是一个HRegion,每个region中包含这个表里的所有行 HRegionServer 数据库的数据存在HDFS文件系 ...
- 彻底搞清函数中的this指向
近日阅读<javascript设计模式与开发实践> 书中的apply和call调用函数层出不穷,很多妙用: 函数中的this是根据调用方式来决定的 函数调用方式有4中 1.直接调用 a(. ...
- (基础篇 走进javaNIO)第一章-java的i/o演进之路
Java 是由 SUN公司在 1995 年首先发布 的编程语 言和计算平 台.这基础技术 支持最新 的程序 ,包括 实用程序 .游 戏和业 务应用程序 .J ava 在世界各地 的 8.5 亿 多 ...
- javaWeb学习总结(3)- 通过Servlet生成验证码图片(2)
一.BufferedImage类介绍 生成验证码图片主要用到了一个BufferedImage类,如下:
- 彻底清除Linux centos minerd木马
前几天,公司两台linux服务器,一台访问速度很慢,cpu跑满,一台免密码登录失效,公钥文件被改写成redis的key.用htop命令查询发现了minerd木马进程,初步猜测是redis没有配访问权限 ...
- R绘图字体解决方案(转)
COS论坛里面经常会遇到的一个问题就是绘图时中文字体怎么解决.最初,一个流行的方法是使用family = "GB1",但一般这样做出来的图比较难看,而且并没有完全解决问题.后来发现 ...
- [原创]使用logcat快速抓取android崩溃日志
在android APP测试过程中会发生不少的crash,目前抓取日志的主流方法是通过eclipse或者eclipse的ddms组件进行捕抓,这两种方法有个缺点是启动时非常耗时.本文通过adb程序与b ...
- (转)Windows下tail命令工具(转)
因为随笔无转载按钮,先说明原文地址是: Windows 下 tail 查看日志命令工具分享 使用方法: 下载后解压,把tail.exe 复制到 目录:C:\Windows\System32 下 文件下 ...