python re正则表达式模块
模块的的作用主要是用于字符串和文本处理,查找,搜索,替换等
复习一下基本的正则表达式吧
.:匹配除了换行符以为的任意单个字符
*:匹配任意字符,一个,零个,多个都能匹配得到 俗称贪婪模式
+:匹配位于+之前的一个或者多个字符
|:匹配位于|之前或者之后的字符
^:匹配行首
$:匹配行尾
?:匹配位于?之前的零个或者一个字符,不匹配多个字符
\:表示 \ 之后的为转义字符
[]:匹配[]之中的任意单个字符,[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正则表达式模块的更多相关文章
- Python re(正则表达式)模块
python正则表达式 正则表达式是一个特殊的字符序列,它能帮助我们方便的检查一个字符串是否与某种模式匹配.Python自1.5版本起增加了re模块,它提供Perl风格的正则表达式模式.re模块使Py ...
- 24、python re正则表达式模块
一.re模块的基本使用 Python里数量词默认是贪婪的,总是尝试匹配尽可能多的字符.正则表达式是用来匹配处理字符串的. 假如你需要匹配文本中的字符\,Python里的使用原生字符串表示:r'\\'表 ...
- python re(正则表达式模块)学习
一.简介 正则表达式本身是一种小型的.高度专业化的编程语言,而在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配.正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎 ...
- Python之正则表达式模块
正则表达式符号: . ^ $ * + ? {} () | [] .一个点代表一个字符 ^代表开头 $代表结尾 *代表有0到无数个 [0,+00] ?代表有0到1个 [0,1] +代表有1到无 ...
- 【Python】正则表达式纯代码极简教程
<Python3正则表达式>文字版详细教程链接:https://www.cnblogs.com/leejack/p/9189796.html ''' 内容:Python3正则表达式 日期: ...
- 【Python】正则表达式简单教程
说明:本文主要是根据廖雪峰网站的正则表达式教程学习,并根据需要做了少许修改,此处记录下来以备后续查看. <Python正则表达式纯代码极简教程>链接:https://www.cnblogs ...
- python 历险记(六)— python 对正则表达式的使用(上篇)
目录 引言 什么是正则表达式? 正则表达式有什么用? 正则表达式的语法及使用实例 正则表达式语法有哪些? 这些正则到底该怎么用? 小结 参考文档 系列文章列表 引言 刚接触正则表达式,我也曾被它们天书 ...
- python的re正则表达式模块学习
python中re模块的用法 Python 的 re 模块(Regular Expression 正则表达式)提供各种正则表达式的匹配操作,在文本解析.复杂字符串分析和信息提取时是一个非常有用的工 ...
- Python的regex模块——更强大的正则表达式引擎
Python自带了正则表达式引擎(内置的re模块),但是不支持一些高级特性,比如下面这几个: 固化分组 Atomic grouping 占有优先量词 Possessive quantifi ...
随机推荐
- django-2 models
一个model 对应DB的一张表 models 以类的形式表现: 一些字段.数据的一些行为 对类.类的对象 操作,无需写SQL = > object relation mapping ORM ...
- PyQt5+requests实现车票查询工具
PyQt5+requests实现一个车票查询工具,供大家参考,具体内容如下 结构图 效果图 思路 1.search(QPushButton)点击信号(clicked)连接到自定义的槽函数(ev ...
- 关于使用mongodb中遇到的时间戳雷同的问题
文不对题,实际上不是时间戳,而是我们使用js取当前毫秒数,将他看为时间戳,每次updata的时候,获取当前毫秒数,把它当做create_time的默认值,自动添加到我们的数据库中,数据模型如下 开始的 ...
- Spring Boot 2 (二):Spring Boot 2 尝鲜-动态 Banner
Spring Boot 2.0 提供了很多新特性,其中就有一个小彩蛋:动态 Banner,今天我们就先拿这个来尝尝鲜. 配置依赖 使用 Spring Boot 2.0 首先需要将项目依赖包替换为刚刚发 ...
- 3.2.8 sed 的运作
sed 的工作方式相当直接.命令行上的每个文件会依次打开与读取.如果没有文件,则使用标准输入,文件名“-”(单个破折号)可用于表示标准输入. [many@avention Desk ...
- noip模拟赛 经营与开发
题目描述 4X概念体系,是指在PC战略游戏中一种相当普及和成熟的系统概念,得名自4个同样以“EX”为开头的英语单词. eXplore(探索) eXpand(拓张与发展) eXploit(经营与开发) ...
- 走进矩阵树定理--「CodePlus 2017 12 月赛」白金元首与独舞
n,m<=200,n*m的方阵,有ULRD表示在这个格子时下一步要走到哪里,有一些待决策的格子用.表示,可以填ULRD任意一个,问有多少种填法使得从每个格子出发都能走出这个方阵,答案取模.保证未 ...
- 如何爬取可用的IP代理
上一篇说到对付反爬虫有一个很关键的方法就是使用IP代理,那么我们应该如何获取这些可用的IP代理呢?这里分享一下自己这两天的一些爬取IP代理的心得体会. 1 步骤 1.找到几个提供免费IP代理的网站,获 ...
- Ubuntu 16.04安装WinRAR/7-Zip(基于CrossOver)
基于CrossOver的WinRAR/7-Zip有如下缺点: 1.不能像Windows那样右键菜单解压 可以解决的问题: 1.可以使用提供的浏览工具进行文件选择再解压,只是在操作上多一步. 2.类似百 ...
- 我的arcgis培训照片14
来自:http://www.cioiot.com/successview-562-1.html