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 09 Python
编写Python脚本批量下载DesktopNexus壁纸的教程
May 06 Python
总结python爬虫抓站的实用技巧
Aug 09 Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 Python
Python实现按特定格式对文件进行读写的方法示例
Nov 30 Python
Python3实现转换Image图片格式
Jun 21 Python
Python中is和==的区别详解
Nov 15 Python
Python构建图像分类识别器的方法
Jan 12 Python
对python3.4 字符串转16进制的实例详解
Jun 12 Python
python多线程实现TCP服务端
Sep 03 Python
Python词云的正确实现方法实例
May 08 Python
Python将CSV文件转化为HTML文件的操作方法
Jun 30 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 函数使用方法与函数定义方法
2010/05/09 PHP
PHP连接局域网MYSQL数据库的简单实例
2013/08/26 PHP
PHP7.1新功能之Nullable Type用法分析
2016/09/26 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
简单的JS多重继承示例
2008/03/13 Javascript
浅析AngularJS中的生命周期和延迟处理
2015/06/18 Javascript
JS实现的左侧竖向滑动菜单效果代码
2015/10/19 Javascript
javascript之Boolean类型对象
2016/06/07 Javascript
避免jQuery名字冲突 noConflict()方法
2016/07/30 Javascript
Jquery UI实现一次拖拽多个选中的元素操作
2020/12/01 Javascript
jQuery图片拖动组件Dropzone用法示例
2017/01/17 Javascript
详解Vue.js之视图和数据的双向绑定(v-model)
2017/06/23 Javascript
浅谈React Native Flexbox布局(小结)
2018/01/08 Javascript
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
layui结合form,table的全选、反选v1.0示例讲解
2018/08/15 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
从vue源码解析Vue.set()和this.$set()
2018/08/30 Javascript
[47:22]Mineski vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python使用锁访问共享变量实例解析
2018/02/08 Python
Python 绘制酷炫的三维图步骤详解
2019/07/12 Python
python字符串反转的四种方法详解
2019/12/02 Python
Pytorch中膨胀卷积的用法详解
2020/01/07 Python
在Tensorflow中实现梯度下降法更新参数值
2020/01/23 Python
python程序需要编译吗
2020/06/19 Python
python 调整图片亮度的示例
2020/12/03 Python
10张动图学会python循环与递归问题
2021/02/06 Python
html5/css3响应式页面开发总结
2018/10/16 HTML / CSS
爱他美官方海外旗舰店:Aptamil奶粉
2017/12/22 全球购物
解释一下抽象方法和抽象类
2016/08/27 面试题
学前教育教师求职自荐信
2013/09/22 职场文书
个人自荐材料
2014/05/23 职场文书
2015年民主评议党员工作总结
2015/05/19 职场文书
2015年重阳节主持词
2015/07/04 职场文书
爱护环境建议书
2015/09/14 职场文书
redis限流的实际应用
2021/04/24 Redis
mysql使用instr达到in(字符串)的效果
2022/04/03 MySQL