回顾:

1、文件对象:

  • open('file','mode','bufsize')
  • read,readline,readlines,write,writelines,flush,seek,tell

2、模块:os

  • 文件系统接口

3、模块:os.path

4、对象流失化,持久化:

  • pickle

文件本身在python内部是可迭代对象:

获取当前系统的所有模块

help有两种模式,一个是函数方式调用,另一个是交互式模式调用

help('modules')  或者

help()     是交互式接口


python的正则表达式:

re:

元字符

.              匹配任意单个字符

[.....]        匹配指定范围内的字符

[^.....]      匹配指定范围以外的字符

?             匹配此前的字符0次或一次

+             匹配此前的字符1次或多次

{m}          匹配前面的字符m次

{m,n}       匹配至少m次,至多n次

{0,n}        匹配至多n次,也可以没有

{m,}         匹配至少m次,至多不限

^              牟定行首

$              牟定行尾

pat1|pat2       两种模式取其一

(.....)         分组

\b             可以牟定一个单词

[0-9]: \d    匹配任意数字

[0-9a-zA-Z]   匹配任意数字和字符

[0-9a-zA-Z]:\w,\W对\w取反      \w是字符集

\s:任意空白字符,[\n\t\f\v\r],      大S \S 和小s相反,表示空白字符以外的任意字符

\s是它们的集合:\n表空白,\t制表符,空白   \f表空白、\v垂直制表符,空白、\r换行符

\nn    可以实现后向引用,引用(.....) 分组中的匹配到的内容

(*|+|?|{})?:使用非贪婪模式


re.match

match对象:在re中可以指定起始位置,结束位置,匹配到的字符等

re本身有很多内置方法和属性

re.match对象有很多内置属性

match方法匹配到的结果会生成match对象,必须在获取match对象之后,才能获取内部信息,

如果利用re内部的方法match或search匹配到字符串内容了,就可以对某些match对象使用function获取

在abc字串中找a,匹配到后就返回一个match对象,并告诉在内存什么位置,此对象必须使用变量名引用,

因为任何对象都是保存在内存中,要想引用,必须将内存对象保存在变量名的引用中,否则创建完就消失了


定义一个变量引用m1,这时候m1就是匹配对象,m1本身内部就会有一些方法

match对象是一次正则表达式匹配查询的结果,包含了很多关于此次匹配的信息,要通过内部的属性和方法来获取这些信息

     


re是匹配时使用的pattern对象,需要说明的是re这个模块在实现使用模式匹配所使用的文本时,会首先将字符 (a) 编译compile,编译完之后再去做匹配,如果没有手动编译,它会自动编译。

因此所使用的re即正则表达式,不再是模式本身(a),而是下面被编译的模式

括号中的 表示是正则表达式的模式,


手动编译匹配模式

在abcdefg中查找bc

第一种方式手动编译,模式为bc

pat = re.compile('bc')     手动编译模式bc,这里pat是一个模式对象,

match = pat.match('abcdefg')    使用模式对象去执行一些匹配类的操作,这里pat调用compile('bc') 这个模式,来调用'abcdefg'这个字符串,

第二种模式是自动编译


group解析:

要想实现分组,得在正则表达式中使用()括起来,即(.....) ,第一个()称为group1,第二个()称为group2,因此要想使用group和groups来获取分组结果,一定是这个模式在匹配到结果中的本身进行分组

匹配次数可能是多次,每次匹配有可能会分为多个组

例子:hellopr world:在这个字符串中匹配o会出现两次

(o):如果对这个模式加(),就表示在()中的模式表示第一个分组,即o是第一个分组;

(0(.)):如果o后面可以出现任意字符,且将点加括号--> (.),那么(.)就表示模式中的第二个分组;

利用(0(.))这个模式在hellopr world字串中总共有两次匹配,即op和or;那么对第一次匹配来讲匹配的是op,那么第一个()中的内容0(.)即group1匹配的是op,第二个括号中的内容 . 即group2匹配的是p;

在字符串中进行模式匹配可能不止一次匹配(op,or),因此每一次匹配都会有分组,而且分组可能不止一个(group1、group2、......)

因此对于上述第一次匹配内容op会分为group1即op,和group2即p,

(0(.)):是一个模式,这个模式第一次匹配到的就是op,

group1表示外面的()匹配到的内容即o(.),所以匹配到的内容为op;

group2表示里面的()中的内容匹配的内容即点号 匹配的内容,匹配到的是o后面的字符p,即group2为p

groups就表示每一次匹配中多个分组的集合

第二次匹配时,匹配的是or,那么group1是or,group2是r

使用group1时,就是使用模式(0(.))中第一个左括号 ( 和它右括号)中的内容----即o(.)----进行匹配

使用group2时,就是使用模式(0(.))中第二个左括号 ( 和它右括号)中的内容----即 . ----进行匹配


例子解析:hellopr world

定义字符串str1,手动编译模式(0(.)),利用search搜索字符串str1,这个结果会生成一个匹配对象,把匹配对象保存在变量mat1中,

然后获取mat1的分组,直接给group(),会返回第一次匹配到的整个串即op,

groups    每一次匹配都可能由多个分组,把一次匹配到的多个分组以元组的方式返回叫groups


pos和endpos

pos是搜索字串时,是在原串的哪个位置开始搜索,一直到哪个位置结束搜索的,默认是搜索串的整个组成部分

指定了模式被匹配到的串本身(模式是a,串本身是abc),是从原串的哪个字符位置开始匹配的

endpos表示使用模式 a 搜索字串 abc 时,从哪个位置搜索,一直到哪个位置结束搜索

(一般都是从头开始,到结尾,可以看出原串的大小)

模式匹配位置即搜索位置是可以指定的,默认时从头开始,到最后结束


start和end 

start、end  模式 a 在原串 abc 中匹配时所匹配到的那个串的第一次和结束位置

(即匹配时,模式 a 被匹配到,a 在原串中第一次被搜索到和最后一次被搜索到这两个位置)

pos和endpos是属性,start和end是方法


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

search的意义:在字符串string中,按照pattern进行搜索,并返回第一次初步匹配到的结果,如果有其他匹配,即使在同一行也不做匹配。

search只返回第一次匹配到的结果,返回结果是匹配对象

                


findall

findall返回多次,返回结果仍然是一个匹配对象,如果匹配对象是多个,则以列表的方式来返回所有的匹配对象

finditer(pattern, string, flags=0)

finditer和findall相同,区别在于findall返回的是列表,finditer返回的是迭代器

                       


re.slipt  


re.sub   

sub(pattern, repl, string, count=0, flags=0)    把pattern在string中匹配的内容由repl替换,count是指替换次数

直接返回由repl替换的字符串

          

subn    和sub相同,区别在subn返回的是替换的次数

subn返回的是元组,sub返回的是一个字串


re.search:返回一个macth对象

match对象的属性和方法

  • 属性:
  • string    字符串本身
  • re          正则表达式
  • pos
  • endpos 搜索字符串起始位置
  • 方法:
  • group()
  • start()
  • end()

re.findall:返回一个列表

re.sub:返回替换后的整个串

re.subn:返回元组:替换后的串及替换次数

re.compile:模式对象,手动编译出来

对象都是保存在内存中的,所以要想访问match对象,得使用对象进行获取,获取后在对象是上施加一些操作,但如果回复的对象是空的,就没办法执行了,所以需要提前判断


flags:

I或IGNORECASE:忽略字符大小写

M或MULTILINE:多行匹配

A或ASCII:仅执行8位ASCII码匹配

U或UNICODE:执行unicode匹配

pat2 = re.compile('.(o(.))',re.I)     手动编译匹配模式,re.I表示匹配时忽略大小

pat2 = re.compile('.(o(.))',re.I|re.M)    | 表示或者    re.M:表示跨多行匹配

           


思考:复制/etc/passwd到/tmp,如何替换/tmp/passwd中的/bin/bash为/BIN/BASH?

1、Python中的正则表达式(0601)的更多相关文章

  1. Python::re 模块 -- 在Python中使用正则表达式

    前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...

  2. 在Python中使用正则表达式同时匹配邮箱和电话并进行简单的分类

    在Python使用正则表达式需要使用re(regular exprssion)模块,使用正则表达式的难点就在于如何写好p=re.compile(r' 正则表达式')的内容. 下面是在Python中使用 ...

  3. python模块 re模块与python中运用正则表达式的特点 模块知识详解

    1.re模块和基础方法 2.在python中使用正则表达式的特点和问题 3.使用正则表达式的技巧 4.简单爬虫例子 一.re模块 模块引入; import re 相关知识: 1.查找: (1)find ...

  4. Python学习-38.Python中的正则表达式(二)

    在Python中,正则表达式还有较其他编程语言有特色的地方.那就是支持松散正则表达式了. 在某些情况,正则表达式会写得十分的长,这时候,维护就成问题了.而松散正则表达式就是解决这一问题的办法. 用上一 ...

  5. Python学习-37.Python中的正则表达式

    作为一门现代语言,正则表达式是必不可缺的,在Python中,正则表达式位于re模块. import re 这里不说正则表达式怎样去匹配,例如\d代表数字,^代表开头(也代表非,例如^a-z则不匹配任何 ...

  6. [Python]网络爬虫(七):Python中的正则表达式教程

    转自:http://blog.csdn.net/pleasecallmewhy/article/details/8929576#t4 接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一 ...

  7. [Python]网络爬虫(七):Python中的正则表达式教程(转)

    接下来准备用糗百做一个爬虫的小例子. 但是在这之前,先详细的整理一下Python中的正则表达式的相关内容. 正则表达式在Python爬虫中的作用就像是老师点名时用的花名册一样,是必不可少的神兵利器. ...

  8. 在python中使用正则表达式(转载)

    https://www.cnblogs.com/hanmk/p/9143514.html 在python中使用正则表达式(一)   在python中通过内置的re库来使用正则表达式,它提供了所有正则表 ...

  9. python中的正则表达式(re模块)

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

随机推荐

  1. flask上下文全局变量,程序上下文、请求上下文、上下文钩子

    Flask上下文 Flask中有两种上下文,程序上下文(application context)和请求上下文(request context) 当客户端发来请求时,请求上下文就登场了.请求上下文里包含 ...

  2. Android Auto开发初探

    一.Android Auto 概述 二.Android Auto 使用方法 四.Android Auto应用开发 五.Android Auto开发总结 一.Android Auto 概述 最近物联网是 ...

  3. .net大型平台通过Nginx做负载均衡(Web层、中间服务层、DB层)

    .net平台下,我目前部署过的均衡负载有两种方式(iis7和Nginx),以下以Nginx为例讲解web层的均衡负载. 简介:Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx ...

  4. 在Linux 中如何从进程相关的文件描述中恢复数据

    在Linux中误删除了某个文件,但是 ps-ef|grep 文件名 发现某个进程还在使用该文件,那么可以通 过以下方式恢复文件. 例如:创建一个简单文件/tmp/test.txt, 随便向里面写点内容 ...

  5. 浏览器从输入URL到页面加载显示完成全过程解析

    一 浏览器查找域名对应的 IP 地址(域名解析的过程,先进行缓存的查看): 1.在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用 ...

  6. 安装使用zookeeper

    1,加压 2,复制zoo_sample.cfg命名为zoo.cfg 3,在conf同级目录下新建一文件夹 data 4,修改数据存放目录 5,启动zookeeper

  7. How many zero's and how many digits ? UVA - 10061

    Given a decimal integer number you will have to find out how many trailing zeros will be there in it ...

  8. 算法竞赛入门经典训练指南——UVA 11300 preading the Wealth

    A Communist regime is trying to redistribute wealth in a village. They have have decided to sit ever ...

  9. 翻唱 - shape of you - 个个版本

    翻唱: http://7j1xky.com1.z0.glb.clouddn.com/1525514286196.mp4 乐队版-我的翻唱-混合 http://7j1xky.com1.z0.glb.cl ...

  10. AngularJS中angular.min.js:80 Error: [ng:areq] http://errors.angularjs.org/1.2.9/ng/areq

    报出来的时候,出现这种错误,是因为在引入控制器的时候没有引入成功,我遇到这个错误是在因为没有将父控制器引入到子控制器中.