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 psutil库安装教程
Mar 19 Python
完美解决安装完tensorflow后pip无法使用的问题
Jun 11 Python
Python3随机漫步生成数据并绘制
Aug 27 Python
Python学习笔记之文件的读写操作实例分析
Aug 07 Python
win10系统Anaconda和Pycharm的Tensorflow2.0之CPU和GPU版本安装教程
Dec 03 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
Dec 04 Python
python使用pandas抽样训练数据中某个类别实例
Feb 28 Python
Python使用type动态创建类操作示例
Feb 29 Python
Python3之外部文件调用Django程序操作model等文件实现方式
Apr 07 Python
Python 随机按键模拟2小时
Dec 30 Python
Python 无限级分类树状结构生成算法的实现
Jan 21 Python
Python 制作自动化翻译工具
Apr 25 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简单封装了一些常用JS操作
2007/02/25 PHP
PHP Memcached应用实现代码
2010/02/08 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
php并发加锁问题分析与设计代码实例讲解
2021/02/26 PHP
javascript date格式化示例
2013/09/25 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
javascript中SetInterval与setTimeout的定时器用法
2015/08/24 Javascript
SWFUpload多文件上传及文件个数限制的方法
2016/05/31 Javascript
Javascript实现图片懒加载插件的方法
2016/10/20 Javascript
AngularJS使用ng-inlude指令加载页面失败的原因与解决方法
2017/01/19 Javascript
bootstrap paginator分页前后台用法示例
2017/06/17 Javascript
jQuery实现点击DIV同时点击CheckBox,并为DIV上背景色的实例
2017/12/18 jQuery
200行代码实现blockchain 区块链实例详解
2018/03/14 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
函数式编程入门实践(一)
2019/04/20 Javascript
vue通过video.js解决m3u8视频播放格式的方法
2019/07/30 Javascript
webpack的tree shaking的实现方法
2019/09/18 Javascript
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS OG
2018/03/30 DOTA
简明 Python 基础学习教程
2007/02/08 Python
Python中的推导式使用详解
2015/06/03 Python
Python使用pip安装pySerial串口通讯模块
2018/04/20 Python
python实现的MySQL增删改查操作实例小结
2018/12/19 Python
详解将Python程序(.py)转换为Windows可执行文件(.exe)
2019/07/19 Python
详解Django admin高级用法
2019/11/06 Python
在pytorch中动态调整优化器的学习率方式
2020/06/24 Python
SpringBoot首页设置解析(推荐)
2021/02/11 Python
CSS3实现莲花绽放的动画效果
2020/11/06 HTML / CSS
HTML5打开本地app应用的方法
2016/03/31 HTML / CSS
以特惠价提供在线奢侈品购物:FRMODA.com
2018/01/25 全球购物
JAVA和C++的区别
2013/10/06 面试题
如何开启linux的ssh服务
2013/06/03 面试题
艺人经纪人岗位职责
2014/04/15 职场文书
资产运营委托书范本
2014/10/16 职场文书
2015年小学生新年寄语
2014/12/08 职场文书
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL