当前位置: 首页 > news >正文

python re正则表达式模块

模块的的作用主要是用于字符串和文本处理,查找,搜索,替换等

复习一下基本的正则表达式吧

 .:匹配除了换行符以为的任意单个字符


 *:匹配任意字符,一个,零个,多个都能匹配得到 俗称贪婪模式


+:匹配位于+之前的一个或者多个字符


 |:匹配位于|之前或者之后的字符


 ^:匹配行首


 $:匹配行尾


 ?:匹配位于?之前的零个或者一个字符,不匹配多个字符


 \:表示 \ 之后的为转义字符


 []:匹配[]之中的任意单个字符,[0-9]表示匹配0到9任意一个数字


 ():将位于()之内的的内容当作一个整体


 {}:按{}中的次数进行匹配,100[0-9]{3}表示在100之后任意匹配一个3位数(100-999)


 

 python中以\开头的元字符:

 
转义字符含义
\b匹配单词头或者单词尾
\B和\b含义相反
\d匹配任何数字
\D和\d含义相反,匹配任何非数字
\s匹配任何空白字符
\S和\s含义相反,匹配任何非空白字符
\w匹配任何字母,数字,下划线
\W匹配任何非字母,数字,下划线

 

 

 

 

 

 

 

 

 

 

 

 

匹配的标志和含义

标志含义
re.I忽略大小写
re.L根据本地设置而更改\w,\W,\b,\B,\s,\S的匹配内容
re.M 
多行匹配模式
re.S使“.”元字符匹配换行符
re.U匹配Unicode字符
re.X忽略需要匹配模式中的空格,并且可以使用"#"号注释

 

 

 

 

 

 

 

 

 

文本内容(提取linux下的passwd文件)

1 man:x:6:12:man:/var/cache/man:/bin/nologin
View Code

 

re模块中有3个搜索函数,每个函数都接受3个参数(匹配模式,要匹配的字符串,进行匹配的标志),如果匹配到了就返回一个对象实例,么有就返会None.

findall():用于在字符串中查找符合正则表达式的字符串,并返回这些字符串的列表

search():搜索整个字符串,返回对象实例

match():只从第一个字符开始匹配,后面的不再匹配,返回对象实例

 1 lovelinux@LoveLinux:~/py/boke$ cat text 
 2 man:x:6:12:man:/var/cache/man:/bin/sh
 3 lovelinux@LoveLinux:~/py/boke$ cat test.py
 4 #/usr/bin/env python
 5 #coding:utf-8
 6 import re
 7 with open('text','r') as txt:
 8     f = txt.read()
 9     print re.match('bin',f)
10     print re.search('bin',f).end()    
11 lovelinux@LoveLinux:~/py/boke$ python test.py 
12 None
13 34
14 lovelinux@LoveLinux:~/py/boke$ vim test.py
15 lovelinux@LoveLinux:~/py/boke$ python test.py 
16 None
17 <_sre.SRE_Match object at 0x7f12fc9f9ed0>
View Code

 

 search()返回是对象实例有2个方法,

start():返回记录匹配到字符的开始索引 

end():返回记录匹配到字符的结束索引

 1 lovelinux@LoveLinux:~/py/boke$ python test.py 
 2 None
 3 31
 4 34
 5 lovelinux@LoveLinux:~/py/boke$ cat test.py 
 6 #/usr/bin/env python
 7 #coding:utf-8
 8 import re
 9 with open('text','r') as txt:
10     f = txt.read()
11     print re.match('bin',f)
12     print re.search('bin',f).start()
13     print re.search('bin',f).end()
View Code

findall():用于找找匹配的字符,把匹配到的字符作为数组返回

1 #!/usr/bin/env python 
2 #coding:utf-8
3 import re
4 a = " man x 6 12 man / var /cache/man /bin/nologin"
5 print re.findall('[a-z]{3}\s', a)
6 
7 输出结果:
8 ['man ', 'man ', 'var ', 'man ']
View Code

sub():用于替换,接受四个参数,sub(匹配模式,要替换成的内容,进行替换的字符串,最大的替换次数)最后一个为可选参数.返回替换后的字符串

把只有3个字母组成的单词替换成heihei,只替换前3个

1 #!/usr/bin/env python 
2 #coding:utf-8
3 import re
4 a = " man x 6 12 man / var /cache/man /bin/nologin"
5 print re.sub('[a-z]{3}\s', 'heihei',a,3)
6 
7 输出结果:
8 heiheix 6 12 heihei/ heihei/cache/man /bin/nologin
View Code

split():用于分割字符串,接受3个参数re.split(匹配模式,要分割的字符串,最大的分割次数),最后一个为可选参数,返回分割后的字符串列表

1 #!/usr/bin/env python 
2 #coding:utf-8
3 import re
4 a = " man x 6 12 man / var /cache/man /bin/nologin"
5 print re.split('a', a)
6 
7 输出结果:
8 [' m', 'n x 6 12 m', 'n / v', 'r /c', 'che/m', 'n /bin/nologin']
View Code

编译正则表达式
compile():编译正则表达式,返回一个正则对象实例,然后通过返回的对象实例对字符串进行查找替换,接受2个参数compile(正则表达式,匹配标志)
例子搜索web日志里面的IP

1 #!/usr/bin/env python 
2 #coding:utf-8
3 import re
4 logstr = '192.168.1.56 - - [14/Apr/2014:01:33:06 -0400] "GET /favicon.ico HTTP/1.1" 404 571 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101 Safari/537.36"'
5 r = re.compile(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')
6 print r.findall(logstr)
7 
8 输出结果:
9 ['192.168.1.56']
View Code

转载于:https://www.cnblogs.com/pping/p/3847829.html

相关文章:

  • WTL之VS2013环境搭建
  • c语言编写经验逐步积累4
  • Session 和 Cookie 机制
  • C语言中预处理器的相关知识:
  • java基础 - 冒泡排序,随机数算法
  • 大写中文数字-財务
  • 关于android:focusable属性
  • php基础教程(一):预备知识
  • javascript页面刷新的几种方法
  • SFB 项目经验-02-共存迁移-Lync 2013-TO-SFB 2015-规划02
  • PL/SQL常用语句
  • springMvc源码学习之:spirngMvc的拦截器使用
  • linux系统用户以及用户组管理
  • git 使用教程整理
  • cisco 1000v 使用3层模式 这次会一点了。。。
  • 【译】JS基础算法脚本:字符串结尾
  • 「面试题」如何实现一个圣杯布局?
  • Angularjs之国际化
  • Apache的基本使用
  • React的组件模式
  • scala基础语法(二)
  • 从0到1:PostCSS 插件开发最佳实践
  • 面试总结JavaScript篇
  • 通信类
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • MyCAT水平分库
  • RDS-Mysql 物理备份恢复到本地数据库上
  • # Swust 12th acm 邀请赛# [ E ] 01 String [题解]
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #include
  • #每日一题合集#牛客JZ23-JZ33
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • ${factoryList }后面有空格不影响
  • (4) PIVOT 和 UPIVOT 的使用
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)springboot码头作业管理系统 毕业设计 341654
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (三)docker:Dockerfile构建容器运行jar包
  • (三分钟)速览传统边缘检测算子
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (四)linux文件内容查看
  • (一)基于IDEA的JAVA基础12
  • (转)EOS中账户、钱包和密钥的关系
  • (转)Mysql的优化设置
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • ****Linux下Mysql的安装和配置
  • *1 计算机基础和操作系统基础及几大协议
  • .NET Core 和 .NET Framework 中的 MEF2
  • .net core 连接数据库,通过数据库生成Modell
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NetCore部署微服务(二)
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • .NET正则基础之——正则委托