python re正则表达式模块(Regular Expression)


Posted in Python onJuly 16, 2014

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

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

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

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

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

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

 ^:匹配行首

 $:匹配行尾

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

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

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

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

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

python中以\开头的元字符:

特殊序列符号 意义
\A 只在字符串开始进行匹配
\Z 只在字符串结尾进行匹配
\b 匹配位于开始或结尾的空字符串
\B 匹配不位于开始或结尾的空字符串
\d 相当于[0-9]
\D 相当于[^0-9]
\s 匹配任意空白字符:[\t\n\r\r\v]
\S 匹配任意非空白字符:[^\t\n\r\r\v]
\w 匹配任意数字和字母:[a-zA-Z0-9]
\W 匹配任意非数字和字母:[^a-zA-Z0-9]

正则表达式语法表

语法 意义 说明
"." 任意字符
"^" 字符串开始 '^hello'匹配'helloworld'而不匹配'aaaahellobbb'
"$" 字符串结尾 与上同理
"*"  0 个或多个字符(贪婪匹配) 匹配chinaunix
"+" 1 个或多个字符(贪婪匹配) 与上同理
"?" 0 个或多个字符(贪婪匹配) 与上同理
*?,+?,?? 以上三个取第一个匹配结果(非贪婪匹配) 匹配
{m,n} 对于前一个字符重复m到n次,{m}亦可 a{6}匹配6个a、a{2,4}匹配2到4个a
{m,n}? 对于前一个字符重复m到n次,并取尽可能少 ‘aaaaaa'中a{2,4}只会匹配2个
"\\" 特殊字符转义或者特殊序列
[] 表示一个字符集 [0-9]、[a-z]、[A-Z]、[^0]
"|" A|B,或运算
(...) 匹配括号中任意表达式
(?#...) 注释,可忽略
(?=...) Matches if ... matches next, but doesn't consume the string. '(?=test)'  在hellotest中匹配hello
(?!...) Matches if ... doesn't match next. '(?!=test)'  若hello后面不为test,匹配hello
(? Matches if preceded by ... (must be fixed length). '(?
(? Matches if not preceded by ... (must be fixed length). '(?

匹配的标志和含义

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

文本内容(提取Linux下的password文件)

man:x:6:12: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>

返回是对象实例有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()
Python 相关文章推荐
讲解Python中的递归函数
Apr 27 Python
详解Python的Django框架中Manager方法的使用
Jul 21 Python
Python语言实现将图片转化为html页面
Dec 06 Python
python在非root权限下的安装方法
Jan 23 Python
Python元组拆包和具名元组解析实例详解
Mar 26 Python
Python实现程序判断季节的代码示例
Jan 28 Python
Python提取频域特征知识点浅析
Mar 04 Python
详解python读取和输出到txt
Mar 29 Python
Python 给定的经纬度标注在地图上的实现方法
Jul 05 Python
解决Python中pandas读取*.csv文件出现编码问题
Jul 12 Python
python框架django项目部署相关知识详解
Nov 04 Python
基于Python 中函数的 收集参数 机制
Dec 21 Python
Web服务器框架 Tornado简介
Jul 16 #Python
高性能web服务器框架Tornado简单实现restful接口及开发实例
Jul 16 #Python
Django在Win7下的安装及创建项目hello word简明教程
Jul 14 #Python
python django集成cas验证系统
Jul 14 #Python
用python + hadoop streaming 分布式编程(一) -- 原理介绍,样例程序与本地调试
Jul 14 #Python
用python + openpyxl处理excel2007文档思路以及心得
Jul 14 #Python
Python库urllib与urllib2主要区别分析
Jul 13 #Python
You might like
九个你必须知道而且又很好用的php函数和特点
2013/08/08 PHP
js版本A*寻路算法
2006/12/22 Javascript
JS跨域代码片段
2012/08/30 Javascript
js复制到剪切板的实例方法
2013/06/28 Javascript
JavaScript设计模式之代理模式介绍
2014/12/28 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
JS实现简洁、全兼容的拖动层实例
2015/05/13 Javascript
JS简单去除数组中重复项的方法
2016/09/13 Javascript
Js动态设置rem来实现移动端字体的自适应代码
2016/10/14 Javascript
微信小程序 配置文件详细介绍
2016/12/14 Javascript
nodejs 搭建简易服务器的图文教程(推荐)
2017/07/18 NodeJs
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
vue-cli项目中使用echarts图表实例
2018/10/22 Javascript
Vue.js实现可排序的表格组件功能示例
2019/02/19 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
2019/09/27 Javascript
Vue插件之滑动验证码用法详解
2020/04/05 Javascript
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
跟老齐学Python之数据类型总结
2014/09/24 Python
Python下Fabric的简单部署方法
2015/07/14 Python
用Python实现命令行闹钟脚本实例
2016/09/05 Python
简单谈谈python中的多进程
2016/11/06 Python
Python更新数据库脚本两种方法及对比介绍
2017/07/27 Python
Django如何自定义model创建数据库索引的顺序
2019/06/20 Python
Python pandas自定义函数的使用方法示例
2019/11/20 Python
使用Python第三方库pygame写个贪吃蛇小游戏
2020/03/06 Python
Python semaphore evevt生产者消费者模型原理解析
2020/03/18 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
路易威登和香奈儿手袋:LuxeDH
2017/01/12 全球购物
Ibatis的核心配置文件都有什么
2014/09/08 面试题
Python文件操作的面试题
2013/06/22 面试题
会计专业自荐信
2013/12/02 职场文书
销售个人求职信范文
2014/04/28 职场文书
公益广告标语
2014/06/19 职场文书
小学阳光体育活动总结
2014/07/05 职场文书