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中处理XML的教程
Apr 29 Python
基于Python实现文件大小输出
Jan 11 Python
python常见排序算法基础教程
Apr 13 Python
Python常用算法学习基础教程
Apr 13 Python
python中Pycharm 输出中文或打印中文乱码现象的解决办法
Jun 16 Python
Python实现的简单模板引擎功能示例
Sep 02 Python
python利用rsa库做公钥解密的方法教程
Dec 10 Python
用python代码将tiff图片存储到jpg的方法
Dec 04 Python
Python操作注册表详细步骤介绍
Feb 05 Python
基于virtualenv创建python虚拟环境过程图解
Mar 30 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
Dec 29 Python
Python闭包的定义和使用方法
Apr 11 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/11/05 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
用Laravel轻松处理千万级数据的方法实现
2020/12/25 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
判断客户端浏览器是否安装了Flash插件的多种方法
2010/08/11 Javascript
JQuery动态给table添加、删除行 改进版
2011/01/19 Javascript
JS模拟面向对象全解(一、类型及传递)
2011/07/13 Javascript
AngularJS 实现JavaScript 动画效果详解
2016/09/08 Javascript
jQuery属性选择器用法示例
2016/09/09 Javascript
BootStrap与Select2使用小结
2017/02/17 Javascript
JS正则表达式判断有效数实例代码
2017/03/13 Javascript
JS数组搜索之折半搜索实现方法分析
2017/03/27 Javascript
详解webpack打包vue时提取css
2017/05/26 Javascript
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
使用js获取伪元素的content实例
2017/10/24 Javascript
Angular4学习教程之DOM属性绑定详解
2018/01/04 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
详解Webstorm 下的Angular2.0开发之路(图文)
2018/12/06 Javascript
使用layui+ajax实现简单的菜单权限管理及排序的方法
2019/09/10 Javascript
layer iframe 设置关闭按钮的方法
2019/09/12 Javascript
vue 更改连接后台的api示例
2019/11/11 Javascript
Django中的“惰性翻译”方法的相关使用
2015/07/27 Python
Python自定义简单图轴简单实例
2018/01/08 Python
Django admin禁用编辑链接和添加删除操作详解
2019/11/15 Python
python实现FTP文件传输的方法(服务器端和客户端)
2020/03/20 Python
是否有自动比较结构的方法
2015/06/03 面试题
Java中的异常处理机制的简单原理和应用
2013/04/27 面试题
《我要的是葫芦》教学反思
2014/02/23 职场文书
购房意向书
2014/08/30 职场文书
党员自我评议对照检查材料
2014/09/27 职场文书
计划生育诚信协议书
2014/11/02 职场文书
学校党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
高考作弊检讨书1500字
2015/02/16 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书
Python 一键获取电脑浏览器的账号密码
2022/05/11 Python