一、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模块与正则表达式小结相关推荐

  1. 【Python笔记】使用 re 模块实现正则表达式操作

    使用 re 模块实现正则表达式操作 匹配字符串 使用 match() 方法进行匹配 使用 search() 方法进行匹配 使用 findall() 方法进行匹配 替换字符串 使用正则表达式分割字符串 ...

  2. python中怎样使用re模块_PYTHON正则表达式 re模块使用说明

    首先,运行 Python 解释器,导入 re 模块并编译一个 RE: #!python Python 2.2.2 (#1, Feb 10 2003, 12:57:01) >>> im ...

  3. python中match方法返回字符串的长度_Python re模块与正则表达式详解

    Python 中使用re模块处理正则表达式,正则表达式主要用来处理文本中的查找,匹配,替换,分割等问题:我们先来看一个问题,切入正则表达式. 问题: 匹配字符串,最少以3个数字开头.使用Python代 ...

  4. 初学者python笔记(re模块、正则表达式完全解析)

    文章目录 正则表达式与re模块 字符匹配 普通字符匹配 利用元字符进行模糊匹配 元字符: . ^ $ + ? {} [] | () \ 重复的字符匹配 re模块下的其他方法 今天总结一下正则表达式,它 ...

  5. python re模块_python 正则表达式 (重点) re模块

    京东的注册页面,打开页面我们就看到这些要求输入个人信息的提示. 假如我们随意的在手机号码这一栏输入一个11111111111,它会提示我们格式有误. 这个功能是怎么实现的呢? 假如现在你用python ...

  6. python re 模块及正则表达式调用认识 (2)

    接<python re 模块及正则表达式调用认识> \number 匹配与前面组编号相匹配的文本.从1开始编号到99. For example, (.+) \1 matches 'thet ...

  7. python每日读02-re模块与正则表达式

    python每日读02-re模块与正则表达式 例程学习与注释 检查对子 在这个例子里,我们可以使用以下辅助函数来更好的显示匹配对象 def displaymatch(match):if match i ...

  8. Python爬虫学习笔记-第六课(正则表达式下+csv模块的使用)

    正则表达式下+csv模块的使用 1. re模块方法补充 1.1 compile()方法 1.2 search()和findall()方法 1.3 split()方法 1.4 sub()方法 2. re ...

  9. Python中爬虫框架或模块的区别

    Python中爬虫框架或模块的区别,我们在Python的学习过程中,需要不断的总结知识点,这样我们才能进步的更快一些. (1)爬虫框架或模块 Python自带爬虫模块:urllib.urllib2; ...

  10. Python 之路 Day5 - 常用模块学习

    模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configparser has ...

最新文章

  1. 三维空间平面拟合MATLAB
  2. 加速100倍,性能媲美SOTA!浙大提出无数据知识蒸馏新方法FastDFKD
  3. CSS之未知高度多行文本垂直居中
  4. 操作系统老师上课讲的那个根据I/O时间和CPU时间比例来为进程分配优先级的题目,I/O时间比例越大,则这个进程的优先级越高
  5. hibernate查询-基本查询
  6. HTTP响应头信息 Content-Disposition 文件的显示或下载
  7. window powershell 筛选
  8. Safari浏览器(有时没有图片时,提交会出现问题)。
  9. 批处理脚本 - 可移动的远程桌面启动器
  10. Maven 详解及常用命令
  11. 夜深人静了,我们来学学分布式锁
  12. unity 3d音效如何设置?,近大远小
  13. 一种插槽式的组件化框架中间件——SCC
  14. 离散数学复习集合之关系
  15. mysql_upgrade --force,MySQL force upgrade
  16. 跨平台开发解决方案浅谈
  17. S-Trees UVA - 712(建树即可)
  18. 雨松MOMO 之 开始学习搭建界面自适应屏幕(一)
  19. Nacos2.0启动报错:Your project setup is incompatible with our requirements due to following reasons:
  20. linux ubuntu ping dig 域名解析相关

热门文章

  1. VirtualBox是什么
  2. eclipse提示打不开java虚拟机
  3. 如何将PDF转换成Word
  4. 局域网聊天服务器(openfire)安装与配置
  5. myeclipse2017添加tomcat后,在tomcat启动按钮里面找不到的问题
  6. (二)java版电子商务spring cloud分布式微服务b2b2c社交电商-Spring Boot配置文件详解...
  7. ABP源码分析五:ABP初始化全过程
  8. to teacher eulogy
  9. 初入职场,你够聪明不?
  10. 批量释放系统共享内存