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 实现红包随机生成算法的简单实例
Jan 04 Python
Python机器学习之K-Means聚类实现详解
Feb 22 Python
python如何实现反向迭代
Mar 20 Python
Linux-ubuntu16.04 Python3.5配置OpenCV3.2的方法
Apr 02 Python
python如何生成各种随机分布图
Aug 27 Python
Python利用字典破解WIFI密码的方法
Feb 27 Python
python在OpenCV里实现投影变换效果
Aug 30 Python
Python3的unicode编码转换成中文的问题及解决方案
Dec 10 Python
python 计算概率密度、累计分布、逆函数的例子
Feb 25 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
Apr 08 Python
tensorflow指定CPU与GPU运算的方法实现
Apr 21 Python
Python实现提取PDF简历信息并存入Excel
Apr 02 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生成自适应大小的缩略图类及使用方法分享
2014/05/06 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
PHP文件类型检查及fileinfo模块安装使用详解
2019/05/09 PHP
js 加载并解析XML字符串的代码
2009/12/13 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
JavaScript闭包函数访问外部变量的方法
2014/08/27 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
不得不分享的JavaScript常用方法函数集(上)
2015/12/23 Javascript
jquery.cookie.js用法实例详解
2015/12/25 Javascript
百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
2016/02/19 Javascript
js判断空对象的实例(超简单)
2016/07/26 Javascript
JS判断键盘是否按的回车键并触发指定按钮点击操作的方法
2017/02/13 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
Vue 动态设置路由参数的案例分析
2018/04/24 Javascript
优化Vue中date format的性能详解
2020/01/13 Javascript
nuxt 路由、过渡特效、中间件的实现代码
2020/11/06 Javascript
Python解释执行原理分析
2014/08/22 Python
Django1.7+python 2.78+pycharm配置mysql数据库
2016/10/09 Python
利用python程序帮大家清理windows垃圾
2017/01/15 Python
Python实现的手机号归属地相关信息查询功能示例
2017/06/08 Python
python通过伪装头部数据抵抗反爬虫的实例
2018/05/07 Python
Django Admin实现三级联动的示例代码(省市区)
2018/06/22 Python
python itchat给指定联系人发消息的方法
2019/06/11 Python
用python制作个音乐下载器
2021/01/30 Python
CSS3 伪类选择器 nth-child()说明
2010/07/10 HTML / CSS
css3绘制天猫logo实现代码
2012/11/06 HTML / CSS
HTML5 离线应用之打造零请求、无流量网站的解决方法
2013/04/25 HTML / CSS
《登鹳雀楼》教学反思
2014/04/09 职场文书
2016新年感言
2015/08/03 职场文书
2015年六年级班主任工作总结
2015/10/15 职场文书
深入理解java.lang.String类的不可变性
2021/06/27 Java/Android
聊聊redis-dump工具安装问题
2022/01/18 Redis
Selenium浏览器自动化如何上传文件
2022/04/06 Python
开发者首先否认《遗弃》被取消的传言
2022/04/11 其他游戏
如何利用python实现Simhash算法
2022/06/28 Python