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 相关文章推荐
在Python3中使用asyncio库进行快速数据抓取的教程
Apr 02 Python
详解Python多线程
Nov 14 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
Feb 26 Python
对python中for、if、while的区别与比较方法
Jun 25 Python
Python中使用logging和traceback模块记录日志和跟踪异常
Apr 09 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
Apr 29 Python
详解PyTorch中Tensor的高阶操作
Aug 18 Python
python用opencv完成图像分割并进行目标物的提取
May 25 Python
基于python 取余问题(%)详解
Jun 03 Python
Python生成器generator原理及用法解析
Jul 20 Python
浅析Python 责任链设计模式
Sep 11 Python
Python中使用Opencv开发停车位计数器功能
Apr 04 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文件夹的创建与删除方法
2015/01/24 PHP
PHP实现批量修改文件后缀名的方法
2015/07/30 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
ThinkPHP表单令牌错误的相关解决方法分析
2016/05/20 PHP
PHP图形计数器程序显示网站用户浏览量
2016/07/20 PHP
Avengerls vs Newbee BO3 第三场2.18
2021/03/10 DOTA
jqPlot jquery的页面图表绘制工具
2009/07/25 Javascript
JavaScript 设计模式之组合模式解析
2010/04/09 Javascript
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
JavaScript前端开发之实现二进制读写操作
2015/11/04 Javascript
JS 实现计算器详解及实例代码(一)
2017/01/08 Javascript
详解打造 Vue.js 可复用组件
2017/03/24 Javascript
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
2018/10/20 Javascript
layui树形菜单动态遍历的例子
2019/09/23 Javascript
JS快速实现简单计算器
2020/04/08 Javascript
JQuery表单元素取值赋值方法总结
2020/05/12 jQuery
vue基于better-scroll实现左右联动滑动页面
2020/06/30 Javascript
[01:15:16]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第一场 1月26日
2021/03/11 DOTA
python数据预处理之将类别数据转换为数值的方法
2017/07/05 Python
推荐10款最受Python开发者欢迎的Python IDE
2018/09/16 Python
Python 实现域名解析为ip的方法
2019/02/14 Python
python 实现按对象传值
2019/12/26 Python
Python自动登录QQ的实现示例
2020/08/28 Python
Appium+Python实现简单的自动化登录测试的实现
2021/01/26 Python
CSS3 Notes: -webkit-box-reflect实现倒影的实例
2016/12/08 HTML / CSS
英国百安居装饰建材网上超市:B&Q
2016/09/13 全球购物
Vince官网:全球著名设计师品牌,休闲而优雅的服饰
2017/01/15 全球购物
英国办公家具网站:Furniture At Work
2019/10/07 全球购物
争论的故事教学反思
2014/02/06 职场文书
青春雷锋观后感
2015/06/10 职场文书
学习nginx基础知识
2021/09/04 Servers
关于的python五子棋的算法
2022/05/02 Python