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 相关文章推荐
在主机商的共享服务器上部署Django站点的方法
Jul 22 Python
python使用opencv进行人脸识别
Apr 07 Python
python机器学习之贝叶斯分类
Mar 26 Python
Flask之flask-script模块使用
Jul 26 Python
django_orm查询性能优化方法
Aug 20 Python
python实现flappy bird小游戏
Dec 24 Python
Python并发:多线程与多进程的详解
Jan 24 Python
Python如何处理大数据?3个技巧效率提升攻略(推荐)
Apr 15 Python
微信公众号token验证失败解决方案
Jul 22 Python
win10下python2和python3共存问题解决方法
Dec 23 Python
Python如何爬取51cto数据并存入MySQL
Aug 25 Python
matplotlib更改窗口图标的方法示例
Feb 03 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中数组合并的两种方法及区别介绍
2012/09/14 PHP
控制PHP的输出:缓存并压缩动态页面
2013/06/11 PHP
php5.2 Json不能正确处理中文、GB编码的解决方法
2014/03/28 PHP
PHP 面向对象程序设计(oop)学习笔记 (四) - 异常处理类Exception
2014/06/12 PHP
php判断类是否存在函数class_exists用法分析
2014/11/14 PHP
PHPExcel内存泄漏问题解决方法
2015/01/23 PHP
php 类自动载入的方法
2015/06/03 PHP
PHP中Cookie的使用详解(简单易懂)
2017/04/28 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
2017/07/31 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
070823更新的一个[消息提示框]组件 兼容ie7
2007/08/29 Javascript
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
iframe如何动态创建及释放其所占内存
2014/09/03 Javascript
node.js中的fs.chownSync方法使用说明
2014/12/16 Javascript
深入学习JavaScript的AngularJS框架中指令的使用方法
2016/03/05 Javascript
Web前端开发工具——bower依赖包管理工具
2016/03/29 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
bootstrap监听滚动实现头部跟随滚动
2016/11/08 Javascript
Javascript中常用类型的格式化方法小结
2016/12/26 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
2017/04/12 Javascript
Iphone手机、安卓手机浏览器控制默认缩放大小的方法总结(附代码)
2017/08/18 Javascript
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
基于vue 实现表单中password输入的显示与隐藏功能
2019/07/19 Javascript
java实现单链表增删改查的实例代码详解
2019/08/30 Javascript
如何实现小程序与小程序之间的跳转
2020/11/04 Javascript
Python的高级Git库 Gittle
2014/09/22 Python
Python 列表排序方法reverse、sort、sorted详解
2016/01/22 Python
python快排算法详解
2019/03/04 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
2019/10/12 Python
Python编程快速上手——疯狂填词程序实现方法分析
2020/02/29 Python
python 实现的车牌识别项目
2021/01/25 Python
教你如何一步一步用Canvas写一个贪吃蛇
2018/10/22 HTML / CSS
乔迁宴答谢词
2014/01/21 职场文书
2015年教师工作总结范文
2015/03/31 职场文书
活着观后感
2015/06/03 职场文书