python re span_Python的re模块与正则表达式小结
一、Python模块之RE模块
一些可选值:
re.I(全拼:ignorecase):忽略大小写
re.M(全拼:multiline):多行模式,改变^和$的行为
re.S(全拼:datall):点任意匹配模式,改变.的行为
re.L(全拼locale):是预定字符串类\w \W \b \B \s \S取决于当前区域设定
re.U(全拼:UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
re.X(全拼:VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。
方法:
1.group([group1, …]):
获得一个或多个分组截获的字符串;指定多个参数时将以元组形式返回。group1可以使用编号也可以使用别名;编号0代表整个匹配的子串;不填写参数时,返回group(0);没有截获字符串的组返回None;截获了多次的组返回最后一次截获的子串。
2.groups([default]):
以元组形式返回全部分组截获的字符串。相当于调用group(1,2,…last)。default表示没有截获字符串的组以这个值替代,默认为None。
3.groupdict([default]):
返回以有别名的组的别名为键、以该组截获的子串为值的字典,没有别名的组不包含在内。default含义同上。
4.start([group]):
返回指定的组截获的子串在string中的起始索引(子串第一个字符的索引)。group默认值为0。
5.end([group]):
返回指定的组截获的子串在string中的结束索引(子串最后一个字符的索引+1)。group默认值为0。
6.span([group]):
返回(start(group), end(group))。
7.expand(template):
将匹配到的分组代入template中然后返回。template中可以使用\id或\g、\g引用分组,但不能使用编号0。\id与\g是等价的;但\10将被认为是第10个分组,如果你想表达\1之后是字符’0’,只能使用\g0。
pattern可以理解为一个匹配模式,利用re.compile方法就可以。例如:
pattern = re.compile(r'hello')
在参数中传入原生字符串对象,通过compile方法生成一个pattern对象。
1.re.match(pattern,string,[flags])
这个方法会从string字符串的开头开始,尝试匹配pattern,一直向后匹配,如遇到无法匹配的字符串,返回None,如果匹配未结束已经到达string尾,也会返回None。另个结果表示匹配失败,否则成功,同时匹配终止。
import re
pattern = re.compile(r'hello')#r的意思是"原生字符串"
result_1 = re.match(pattern,'hello')
result_2 = re.match(pattern,'helloo, ASDF')
result_3 = re.match(pattern,'helo asdf')
result_4 = re.match(pattern,'hello adf')
if result_1:
print result_1.group()
else:
print "result_1 匹配失败"
if result_2:
print result_2.group()
else:
print "result_2 匹配失败"
if result_3:
print result_3.group()
else:
print "result_3 匹配失败"
if result_4:
print result_4.group()
else:
print "result_4 匹配失败"
结果是只有3未匹配...
2.re.search(pattern,string,[flags])
与match类似,match是从头开始检测,search会扫描整个string
import re
pattern = re.compile(r'hello')#r的意思是"原生字符串"
result_1 = re.match(pattern,'hello')
result_2 = re.match(pattern,'helloo, ASDF')
result_3 = re.match(pattern,'helo asdf')
result_4 = re.match(pattern,'hello adf')
if result_1:
print result_1.group()
else:
print "result_1 匹配失败"
if result_2:
print result_2.group()
else:
print "result_2 匹配失败"
if result_3:
print result_3.group()
else:
print "result_3 匹配失败"
if result_4:
print result_4.group()
else:
print "result_4 匹配失败"
3.re.split(pattern,string,[flags])
按照能够匹配的子串将少天日工分割后返回列表。
maxsplit用于指定最大分割次数,不指定将全部分割
import re
pattern = re.compile(r'\d+')
print re.split(pattern,'one1two2three3')
4.re.findall(pattern,string,[flags])
搜索string,以列表的形式返回全部匹配的子串
import re
pattern = re.compile(r'\d+')
print re.findall(pattern,'one1two2three3')
5.re.finditer(pattern,string,[flags])
搜索string,返回一个顺序访问没一个匹配结果(match对象)的迭代器
import re
pattern = re.compile(r'\d+')
for i in re.finditer(pattern,'one1two2three3four4'):
print i.group()
6.re.sub(pattern,repl,string ,[count])
使用repl替换string中没一个匹配的子串返回替换后的字符串
7.re.subn(pattern,repl,string,[count])
返回 (sub(repl, string[, count]), 替换次数)
二、正则表达式
正则表达式由以下几个部分组成:
原子(普通字符,如a~z)
有特殊功能的字符(称为元字符,例如*+?等)
模式修正符
/(.+?)/sim
拆分后如下:
定界符使用的是两个斜线'/'
原子用到了
元字符使用了|.*?+d等具有特殊含义的字符
1.定界符
不仅仅局限于斜杠/,除了字母、数字、反斜线以外的字符都可以,如#!{}|等
2.原子
原子是正则表达式最基本的组成单位,这里将其划分为5类进行介绍:
普通字符作为原子
如a~z,0~9,A~Z等
/5/ ---用于匹配是否有5
/php/ ---用于匹配是否有php
一些特殊字符和元字符作为原子
使用特殊字符必须转义,如:
/\./ --用于匹配是否由于.出现
/\
/---用于匹配是否有
出现
一些非打印字符作为原子
非打印字符,如空格,回车,制表符等。
原子字符
含义描述
\cx
匹配一个由x指明的控制字符,例如,\cM匹配一个Ctrl+M或回车符。x的值必须为az或者AZ之一。否则,将c视为一个原义的d字符
\f
匹配一个换页符
\n
匹配一个换行符
\r
匹配一个回车符
\t
匹配一个制表符
\v
匹配一个垂直制表符
使用“通用字符类型”作为原子
前面介绍 的不管是打印字符还是非打印字符,都是一个原子只能匹配一个字符。有时需要匹配所有字母或者所有数字,这是就要用“通用字符类型”
原子字符
含义描述
\d
匹配任意一个十进制数字,等价于[0~9]
\D
匹配任意一个非十进制数字,等价于[ ^ 0~9 ]
\s
匹配任意一个空白字符
\S
匹配出空白字符以外的任何一个字符
\w
匹配任意一个数字、字母、或下划线
\W
匹配除数字、字母、或下划线以外的任何一个字符
自定义原子表[]作为原子
直接上例子:
/[apj]sp/ ---可以匹配asp jsp或psp三种,从原子表中仅选一种作为原子
/[^apj]sp ---可以匹配除asp jsp 和PSP之外的字符串,如xsp,zsp等
/0[xX][0-9a-fA-F] ---可以匹配一个简单的十六进制数
3.元字符
元字符
含义描述
*
匹配0次1次或多次其前的原子
+
匹配1次或多次其前的原子
?
匹配0次或1次其前的原子
|
匹配两个或多个分支选择
.
匹配除了换行符之外的任意一个字符
{n}
表示其前面的原子恰好出现n次
{n,}
表示其前面的原子出现不少于n次
{n,m}
其前面的原子出现次数介于n和m之间
^或\A
匹配输入字符串的开始位置
$或\Z
匹配输入字符串的结束为止
\b
匹配单词的边界
\B
匹配除单词边界以外的部分
[]
匹配方括号中指定的任意一个原子
[^]
匹配除方括号中指定的任意一个原子
()
匹配器整体为一个原子,即模式单元可以理解为多个原子组成的大原子
栗子如下:
/a\s*b/ --可以匹配在a和b之间没用空白,一个空白或多个空白的情况
/a\d+b/----可以匹配在a和b之间1个数字或多个数字的情况
/a\W?b/----可以匹配在a和b之间有一个货没有特殊字符的情况
/ax{4}b/----可以匹配在a和b之间必须有4个x,如axxxxb
/ax{2,}b/ ----ab之间至少两个x
/ax{2,4}b/--ab之间的x的个数在2,4之间
/^this/ --匹配此字符串是否是以this开始的
/this$/
/\bis\b/ ---匹配此字符串中是否含有is
/\Bis\b/ ----查找字符串is时,左边不能有边界,右边必须有边界,如this
/a.b/
/Linux|Apache|mysql/
/(very)*good/ ---可以匹配good,very good,very very good ....等
/(Windows)(Linus)\\2OS/ ---使用\2再次引用第二个缓冲区中的字符串Linux
/(?:windows)(linux)\\1OS/ ---使用?:忽略了第一个表达式的存储,所以\1引用的就是Linux
模式匹配的优先级:
元字符
描述
\
转义符号
()、(?: )、(?=)、[]
模式单元和原子表
*、+、?、{n}、{n,}、{n,m}
重复匹配
^、$、\b、\B、\A、\Z
边界限制
|
模式选择
模式修正符
模式修正符是在正则表达式定界符之外使用
模式修正符
功能描述
i
在和模式进行匹配是不区分大小写
m
将字符串视为多行。默认的正则开始和结束$竟目标字符串作为单一的一行字符(甚至其中包含有换行符也是如此)。如果在修正符中加上m,那么开始和结束将会指字符串的每一行,每一行的开头是,结束是$
s
如果设定了次修正符,则模式中的圆点字符.匹配所有字符,包括换行符。即将字符串视为单行,换行符作为普通字符看待
x
模式中的空白忽略不计,除非它已经被转义
e
只用在preg_replace()函数中,在替换字符串中对逆向引用做正常的替换,将其作为PHP代码求值,并用其结果来替换所搜索的字符串
U
本修正符反转了匹配数量的值使其不是默认的重复,而变成在后面跟上?才变得重复
D
模式中的美元字符仅匹配字符串的结尾。没有此选项是,如果最后一个字符是换行符,则美元符号也会匹配此字符之前的内容。如果设定了m修正符,则忽略此选项。
python re span_Python的re模块与正则表达式小结相关推荐
- 【Python笔记】使用 re 模块实现正则表达式操作
使用 re 模块实现正则表达式操作 匹配字符串 使用 match() 方法进行匹配 使用 search() 方法进行匹配 使用 findall() 方法进行匹配 替换字符串 使用正则表达式分割字符串 ...
- python中怎样使用re模块_PYTHON正则表达式 re模块使用说明
首先,运行 Python 解释器,导入 re 模块并编译一个 RE: #!python Python 2.2.2 (#1, Feb 10 2003, 12:57:01) >>> im ...
- python中match方法返回字符串的长度_Python re模块与正则表达式详解
Python 中使用re模块处理正则表达式,正则表达式主要用来处理文本中的查找,匹配,替换,分割等问题:我们先来看一个问题,切入正则表达式. 问题: 匹配字符串,最少以3个数字开头.使用Python代 ...
- 初学者python笔记(re模块、正则表达式完全解析)
文章目录 正则表达式与re模块 字符匹配 普通字符匹配 利用元字符进行模糊匹配 元字符: . ^ $ + ? {} [] | () \ 重复的字符匹配 re模块下的其他方法 今天总结一下正则表达式,它 ...
- python re模块_python 正则表达式 (重点) re模块
京东的注册页面,打开页面我们就看到这些要求输入个人信息的提示. 假如我们随意的在手机号码这一栏输入一个11111111111,它会提示我们格式有误. 这个功能是怎么实现的呢? 假如现在你用python ...
- python re 模块及正则表达式调用认识 (2)
接<python re 模块及正则表达式调用认识> \number 匹配与前面组编号相匹配的文本.从1开始编号到99. For example, (.+) \1 matches 'thet ...
- python每日读02-re模块与正则表达式
python每日读02-re模块与正则表达式 例程学习与注释 检查对子 在这个例子里,我们可以使用以下辅助函数来更好的显示匹配对象 def displaymatch(match):if match i ...
- Python爬虫学习笔记-第六课(正则表达式下+csv模块的使用)
正则表达式下+csv模块的使用 1. re模块方法补充 1.1 compile()方法 1.2 search()和findall()方法 1.3 split()方法 1.4 sub()方法 2. re ...
- Python中爬虫框架或模块的区别
Python中爬虫框架或模块的区别,我们在Python的学习过程中,需要不断的总结知识点,这样我们才能进步的更快一些. (1)爬虫框架或模块 Python自带爬虫模块:urllib.urllib2; ...
- Python 之路 Day5 - 常用模块学习
模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configparser has ...
最新文章
- 三维空间平面拟合MATLAB
- 加速100倍,性能媲美SOTA!浙大提出无数据知识蒸馏新方法FastDFKD
- CSS之未知高度多行文本垂直居中
- 操作系统老师上课讲的那个根据I/O时间和CPU时间比例来为进程分配优先级的题目,I/O时间比例越大,则这个进程的优先级越高
- hibernate查询-基本查询
- HTTP响应头信息 Content-Disposition 文件的显示或下载
- window powershell 筛选
- Safari浏览器(有时没有图片时,提交会出现问题)。
- 批处理脚本 - 可移动的远程桌面启动器
- Maven 详解及常用命令
- 夜深人静了,我们来学学分布式锁
- unity 3d音效如何设置?,近大远小
- 一种插槽式的组件化框架中间件——SCC
- 离散数学复习集合之关系
- mysql_upgrade --force,MySQL force upgrade
- 跨平台开发解决方案浅谈
- S-Trees UVA - 712(建树即可)
- 雨松MOMO 之 开始学习搭建界面自适应屏幕(一)
- Nacos2.0启动报错:Your project setup is incompatible with our requirements due to following reasons:
- linux ubuntu ping dig 域名解析相关