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与php实现分割文件代码
Mar 06 Python
python利用Guetzli批量压缩图片
Mar 23 Python
Python 将RGB图像转换为Pytho灰度图像的实例
Nov 14 Python
python和flask中返回JSON数据的方法
Mar 26 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
Apr 23 Python
pandas 快速处理 date_time 日期格式方法
Nov 12 Python
对Python 除法负数取商的取整方式详解
Dec 12 Python
详解python算法之冒泡排序
Mar 05 Python
python3人脸识别的两种方法
Apr 25 Python
python with (as)语句实例详解
Feb 04 Python
python由已知数组快速生成新数组的方法
Apr 08 Python
matplotlib部件之矩形选区(RectangleSelector)的实现
Feb 01 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
第十一节--重载
2006/11/16 PHP
扩展你的 PHP 之入门篇
2006/12/04 PHP
PHP用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
深入PHP empty(),isset(),is_null()的实例测试详解
2013/06/06 PHP
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
PHP的mysqli_set_charset()函数讲解
2019/01/23 PHP
微信公众平台开发教程③ PHP实现微信公众号支付功能图文详解
2019/04/10 PHP
yii2 开发api接口时优雅的处理全局异常的方法
2019/05/14 PHP
Laravel Eloquent分表方法并使用模型关联的实现
2019/11/25 PHP
PHP7 错误处理机制修改
2021/03/09 PHP
Javascript 函数中的参数使用分析
2010/03/27 Javascript
setTimeout()与setInterval()方法区别介绍
2013/12/24 Javascript
第十章之巨幕页头缩略图与警告框组件
2016/04/25 Javascript
Bootstrap3 input输入框插入glyphicon图标的方法
2016/05/16 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
javascript 开发之百度地图使用到的js函数整理
2017/05/19 Javascript
利用Javascript开发一个二维周视图日历
2017/12/14 Javascript
element ui 对话框el-dialog关闭事件详解
2018/02/26 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
CryptoJS中AES实现前后端通用加解密技术
2018/12/18 Javascript
jQuery基于随机数解决中午吃什么去哪吃问题示例
2018/12/29 jQuery
localstorage实现带过期时间的缓存功能
2019/06/28 Javascript
react 移动端实现列表左滑删除的示例代码
2019/07/04 Javascript
javascript canvas API内容整理
2020/02/16 Javascript
js+canvas实现五子棋小游戏
2020/08/02 Javascript
vue3.0 项目搭建和使用流程
2021/03/04 Vue.js
一个简单的python爬虫程序 爬取豆瓣热度Top100以内的电影信息
2018/04/17 Python
python2爬取百度贴吧指定关键字和图片代码实例
2019/08/14 Python
安全教育演讲稿
2014/05/09 职场文书
公司委托书怎么写
2014/08/02 职场文书
运动会广播稿150字(9篇)
2014/09/20 职场文书
搞笑的爱情检讨书
2014/10/01 职场文书
2016抗战胜利71周年红领巾广播稿
2015/12/18 职场文书
创业计划书介绍
2019/04/24 职场文书
基于docker安装zabbix的详细教程
2022/06/05 Servers