模块的的作用主要是用于字符串和文本处理,查找,搜索,替换等

复习一下基本的正则表达式吧

 .:匹配除了换行符以为的任意单个字符


 *:匹配任意字符,一个,零个,多个都能匹配得到 俗称贪婪模式


+:匹配位于+之前的一个或者多个字符


 |:匹配位于|之前或者之后的字符


 ^:匹配行首


 $:匹配行尾


 ?:匹配位于?之前的零个或者一个字符,不匹配多个字符


 \:表示 \ 之后的为转义字符


 []:匹配[]之中的任意单个字符,[0-9]表示匹配0到9任意一个数字


 ():将位于()之内的的内容当作一个整体


 {}:按{}中的次数进行匹配,100[0-9]{3}表示在100之后任意匹配一个3位数(100-999)


 python中以\开头的元字符:

 
转义字符 含义
\b 匹配单词头或者单词尾
\B 和\b含义相反
\d 匹配任何数字
\D 和\d含义相反,匹配任何非数字
\s 匹配任何空白字符
\S 和\s含义相反,匹配任何非空白字符
\w 匹配任何字母,数字,下划线
\W 匹配任何非字母,数字,下划线

 

匹配的标志和含义

标志 含义
re.I 忽略大小写
re.L 根据本地设置而更改\w,\W,\b,\B,\s,\S的匹配内容
re.M  多行匹配模式
re.S 使“.”元字符匹配换行符
re.U 匹配Unicode字符
re.X 忽略需要匹配模式中的空格,并且可以使用"#"号注释

文本内容(提取linux下的passwd文件)

 man:x:::man:/var/cache/man:/bin/nologin

re模块中有3个搜索函数,每个函数都接受3个参数(匹配模式,要匹配的字符串,进行匹配的标志),如果匹配到了就返回一个对象实例,么有就返会None.

findall():用于在字符串中查找符合正则表达式的字符串,并返回这些字符串的列表

search():搜索整个字符串,返回对象实例

match():只从第一个字符开始匹配,后面的不再匹配,返回对象实例

 lovelinux@LoveLinux:~/py/boke$ cat text
man:x:6:12:man:/var/cache/man:/bin/sh
lovelinux@LoveLinux:~/py/boke$ cat test.py
#/usr/bin/env python
#coding:utf-8
import re
with open('text','r') as txt:
f = txt.read()
print re.match('bin',f)
print re.search('bin',f).end()
lovelinux@LoveLinux:~/py/boke$ python test.py
None
34
lovelinux@LoveLinux:~/py/boke$ vim test.py
lovelinux@LoveLinux:~/py/boke$ python test.py
None
<_sre.SRE_Match object at 0x7f12fc9f9ed0>

 search()返回是对象实例有2个方法,

start():返回记录匹配到字符的开始索引 

end():返回记录匹配到字符的结束索引

 lovelinux@LoveLinux:~/py/boke$ python test.py
None
31
34
lovelinux@LoveLinux:~/py/boke$ cat test.py
#/usr/bin/env python
#coding:utf-8
import re
with open('text','r') as txt:
f = txt.read()
print re.match('bin',f)
print re.search('bin',f).start()
print re.search('bin',f).end()

findall():用于找找匹配的字符,把匹配到的字符作为数组返回

 #!/usr/bin/env python
#coding:utf-8
import re
a = " man x 6 12 man / var /cache/man /bin/nologin"
print re.findall('[a-z]{3}\s', a) 输出结果:
['man ', 'man ', 'var ', 'man ']

sub():用于替换,接受四个参数,sub(匹配模式,要替换成的内容,进行替换的字符串,最大的替换次数)最后一个为可选参数.返回替换后的字符串

把只有3个字母组成的单词替换成heihei,只替换前3个

 #!/usr/bin/env python
#coding:utf-8
import re
a = " man x 6 12 man / var /cache/man /bin/nologin"
print re.sub('[a-z]{3}\s', 'heihei',a,3) 输出结果:
heiheix 6 12 heihei/ heihei/cache/man /bin/nologin

split():用于分割字符串,接受3个参数re.split(匹配模式,要分割的字符串,最大的分割次数),最后一个为可选参数,返回分割后的字符串列表

 #!/usr/bin/env python
#coding:utf-8
import re
a = " man x 6 12 man / var /cache/man /bin/nologin"
print re.split('a', a) 输出结果:
[' m', 'n x 6 12 m', 'n / v', 'r /c', 'che/m', 'n /bin/nologin']

编译正则表达式
compile():编译正则表达式,返回一个正则对象实例,然后通过返回的对象实例对字符串进行查找替换,接受2个参数compile(正则表达式,匹配标志)
例子搜索web日志里面的IP

 #!/usr/bin/env python
#coding:utf-8
import re
logstr = '192.168.1.56 - - [14/Apr/2014:01:33:06 -0400] "GET /favicon.ico HTTP/1.1" 404 571 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"'
r = re.compile(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')
print r.findall(logstr) 输出结果:
['192.168.1.56']

python re正则表达式模块的更多相关文章

  1. Python re(正则表达式)模块

    python正则表达式 正则表达式是一个特殊的字符序列,它能帮助我们方便的检查一个字符串是否与某种模式匹配.Python自1.5版本起增加了re模块,它提供Perl风格的正则表达式模式.re模块使Py ...

  2. 24、python re正则表达式模块

    一.re模块的基本使用 Python里数量词默认是贪婪的,总是尝试匹配尽可能多的字符.正则表达式是用来匹配处理字符串的. 假如你需要匹配文本中的字符\,Python里的使用原生字符串表示:r'\\'表 ...

  3. python re(正则表达式模块)学习

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

  4. Python之正则表达式模块

    正则表达式符号: . ^ $ * + ? {} () | [] .一个点代表一个字符 ^代表开头 $代表结尾 *代表有0到无数个 [0,+00] ?代表有0到1个      [0,1] +代表有1到无 ...

  5. 【Python】正则表达式纯代码极简教程

    <Python3正则表达式>文字版详细教程链接:https://www.cnblogs.com/leejack/p/9189796.html ''' 内容:Python3正则表达式 日期: ...

  6. 【Python】正则表达式简单教程

    说明:本文主要是根据廖雪峰网站的正则表达式教程学习,并根据需要做了少许修改,此处记录下来以备后续查看. <Python正则表达式纯代码极简教程>链接:https://www.cnblogs ...

  7. python 历险记(六)— python 对正则表达式的使用(上篇)

    目录 引言 什么是正则表达式? 正则表达式有什么用? 正则表达式的语法及使用实例 正则表达式语法有哪些? 这些正则到底该怎么用? 小结 参考文档 系列文章列表 引言 刚接触正则表达式,我也曾被它们天书 ...

  8. python的re正则表达式模块学习

    python中re模块的用法   Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析.复杂字符串分析和信息提取时是一个非常有用的工 ...

  9. Python的regex模块——更强大的正则表达式引擎

    Python自带了正则表达式引擎(内置的re模块),但是不支持一些高级特性,比如下面这几个: 固化分组    Atomic grouping 占有优先量词    Possessive quantifi ...

随机推荐

  1. django-2 models

    一个model 对应DB的一张表 models 以类的形式表现: 一些字段.数据的一些行为 对类.类的对象 操作,无需写SQL = >  object relation mapping  ORM ...

  2. PyQt5+requests实现车票查询工具

    PyQt5+requests实现一个车票查询工具,供大家参考,具体内容如下 结构图   效果图   思路 1.search(QPushButton)点击信号(clicked)连接到自定义的槽函数(ev ...

  3. 关于使用mongodb中遇到的时间戳雷同的问题

    文不对题,实际上不是时间戳,而是我们使用js取当前毫秒数,将他看为时间戳,每次updata的时候,获取当前毫秒数,把它当做create_time的默认值,自动添加到我们的数据库中,数据模型如下 开始的 ...

  4. Spring Boot 2 (二):Spring Boot 2 尝鲜-动态 Banner

    Spring Boot 2.0 提供了很多新特性,其中就有一个小彩蛋:动态 Banner,今天我们就先拿这个来尝尝鲜. 配置依赖 使用 Spring Boot 2.0 首先需要将项目依赖包替换为刚刚发 ...

  5. 3.2.8 sed 的运作

        sed 的工作方式相当直接.命令行上的每个文件会依次打开与读取.如果没有文件,则使用标准输入,文件名“-”(单个破折号)可用于表示标准输入.       [many@avention Desk ...

  6. noip模拟赛 经营与开发

    题目描述 4X概念体系,是指在PC战略游戏中一种相当普及和成熟的系统概念,得名自4个同样以“EX”为开头的英语单词. eXplore(探索) eXpand(拓张与发展) eXploit(经营与开发) ...

  7. 走进矩阵树定理--「CodePlus 2017 12 月赛」白金元首与独舞

    n,m<=200,n*m的方阵,有ULRD表示在这个格子时下一步要走到哪里,有一些待决策的格子用.表示,可以填ULRD任意一个,问有多少种填法使得从每个格子出发都能走出这个方阵,答案取模.保证未 ...

  8. 如何爬取可用的IP代理

    上一篇说到对付反爬虫有一个很关键的方法就是使用IP代理,那么我们应该如何获取这些可用的IP代理呢?这里分享一下自己这两天的一些爬取IP代理的心得体会. 1 步骤 1.找到几个提供免费IP代理的网站,获 ...

  9. Ubuntu 16.04安装WinRAR/7-Zip(基于CrossOver)

    基于CrossOver的WinRAR/7-Zip有如下缺点: 1.不能像Windows那样右键菜单解压 可以解决的问题: 1.可以使用提供的浏览工具进行文件选择再解压,只是在操作上多一步. 2.类似百 ...

  10. 我的arcgis培训照片14

    来自:http://www.cioiot.com/successview-562-1.html