python利用正则表达式提取字符串


Posted in Python onDecember 08, 2016

前言

正则表达式的基础知识就不说了,有兴趣的可以点击这里,提取一般分两种情况,一种是提取在文本中提取单个位置的字符串,另一种是提取连续多个位置的字符串。日志分析会遇到这种情况,下面我会分别讲一下对应的方法。

一、单个位置的字符串提取

这种情况我们可以使用(.+?)这个正则表达式来提取。 举例,一个字符串"a123b",如果我们想提取ab之间的值123,可以使用findall配合正则表达式,这样会返回一个包含所以符合情况的list。

代码如下:

import re
str = "a123b"
print re.findall(r"a(.+?)b",str)#
输出['123']

1.1贪婪和非贪婪匹配

如果我们有一个字符串”a123b456b”,如果我们想匹配a和最后一个b之间的所有值而非a和第一个出现的b之间的值,可以用?来控制正则贪婪和非贪婪匹配的情况。

代码如下:

import re
str = "a123b456b"

print re.findall(r"a(.+?)b", str)
#输出['123']#?控制只匹配0或1个,所以只会输出和最近的b之间的匹配情况

print re.findall(r"a(.+)b", str)
#输出['123b456']

print re.findall(r"a(.*)b", str)
#输出['123b456']

1.2多行匹配

如果你要多行匹配,那么需要加上re.S和re.M标志. 加上re.S后。将会匹配换行符,默认.不会匹配换行符。

代码如下:

str = "a23b\na34b"

re.findall(r"a(\d+)b.+a(\d+)b", str)
#输出[]
#因为不能处理str中间有\n换行的情况

re.findall(r"a(\d+)b.+a(\d+)b", str, re.S)
#s输出[('23', '34')]

加上re.M后,^$标志将会匹配每一行,默认^和$只会匹配第一行。

代码如下:

str = "a23b\na34b"

re.findall(r"^a(\d+)b", str)
#输出['23']

re.findall(r"^a(\d+)b", str, re.M)
#输出['23', '34']

二、连续多个位置的字符串提取

这种情况我们可以使用(?P<name>…)这个正则表达式来提取。举例,如果我们有一行webserver的access日志:'192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search" "Mozilla/5.0"',我们想提取这行日志里面所有的内容,可以写多个(?P<name>expr)来提取,其中name可以更改为你为该位置字符串命名的变量,expr改成提取位置的正则即可。

代码如下:

import re
line ='192.168.0.1 25/Oct/2012:14:46:34 "GET /api HTTP/1.1" 200 44 "http://abc.com/search" 
"Mozilla/5.0"'
reg = re.compile('^(?P<remote_ip>[^ ]*) (?P<date>[^ ]*) "(?P<request>[^"]*)" 
(?P<status>[^ ]*) (?P<size>[^ ]*) "(?P<referrer>[^"]*)" "(?P<user_agent>[^"]*)"')
regMatch = reg.match(line)
linebits = regMatch.groupdict()
print linebits
for k, v in linebits.items() :
 print k+": "+v

输出的结果为:

status: 200
referrer: 
request: GET /api HTTP/1.1
user_agent: Mozilla/5.0
date: 25/Oct/2012:14:46:34size: 44
remote_ip: 192.168.0.1

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Python 相关文章推荐
Python创建系统目录的方法
Mar 11 Python
详解Python中映射类型(字典)操作符的概念和使用
Aug 19 Python
Python下载指定页面上图片的方法
May 12 Python
举例讲解Python编程中对线程锁的使用
Jul 12 Python
Python两个内置函数 locals 和globals(学习笔记)
Aug 28 Python
python实现雨滴下落到地面效果
Jun 21 Python
python并发和异步编程实例
Nov 15 Python
django框架ModelForm组件用法详解
Dec 11 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
Jan 14 Python
python中Django文件上传方法详解
Aug 05 Python
Python操作Excel的学习笔记
Feb 18 Python
Python数据类型最全知识总结
May 31 Python
基于python的七种经典排序算法(推荐)
Dec 08 #Python
Python序列操作之进阶篇
Dec 08 #Python
利用Python破解验证码实例详解
Dec 08 #Python
详解使用python crontab设置linux定时任务
Dec 08 #Python
Python 正则表达式入门(中级篇)
Dec 07 #Python
Python 正则表达式入门(初级篇)
Dec 07 #Python
Python标准库06之子进程 (subprocess包) 详解
Dec 07 #Python
You might like
PHP 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
php可生成缩略图的文件上传类实例
2014/12/17 PHP
用JS剩余字数计算的代码
2008/07/03 Javascript
Google Map Api和GOOGLE Search Api整合实现代码
2009/07/18 Javascript
用Javascript数组处理多个字符串的连接问题
2009/08/20 Javascript
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
2012/06/28 Javascript
ExtJS中文乱码之GBK格式编码解决方案及代码
2013/01/20 Javascript
jquery仿京东导航/仿淘宝商城左侧分类导航下拉菜单效果
2013/04/24 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
2013/04/26 Javascript
jQuery动画特效实例教程
2014/08/29 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
javascript精确统计网站访问量实例代码
2015/12/19 Javascript
jquery获取所有选中的checkbox实现代码
2016/05/26 Javascript
AngularJS 入门教程之事件处理器详解
2016/08/19 Javascript
vue绑定的点击事件阻止冒泡的实例
2018/02/08 Javascript
浅谈Vue SSR中的Bundle的具有使用
2019/11/21 Javascript
vue实现一个矩形标记区域(rectangle marker)的方法
2020/10/28 Javascript
[02:43]中国五虎出征TI3视频
2013/08/02 DOTA
python查找目录下指定扩展名的文件实例
2015/04/01 Python
Python命令行参数解析模块getopt使用实例
2015/04/13 Python
Python类定义和类继承详解
2015/05/08 Python
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
Python中进程和线程的区别详解
2017/10/29 Python
Python实现获取邮箱内容并解析的方法示例
2018/06/16 Python
详解Python爬取并下载《电影天堂》3千多部电影
2019/04/26 Python
详解HTML5中的Communication API基本使用方法
2016/01/29 HTML / CSS
Java多态性的定义以及类型
2014/09/16 面试题
内衣营销方案
2014/03/15 职场文书
文明寝室标语
2014/06/13 职场文书
爱与责任师德演讲稿
2014/08/26 职场文书
村支部书记群众路线对照检查材料思想汇报
2014/10/08 职场文书
2014年政风行风自查自纠报告
2014/10/21 职场文书
影视后期实训报告
2014/11/05 职场文书
银行自荐信范文
2015/03/25 职场文书
python入门学习关于for else的特殊特性讲解
2021/11/20 Python