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 测试实现方法
Dec 24 Python
通过C++学习Python
Jan 20 Python
python决策树之C4.5算法详解
Dec 20 Python
django中send_mail功能实现详解
Feb 06 Python
对Python 多线程统计所有csv文件的行数方法详解
Feb 12 Python
在PYQT5中QscrollArea(滚动条)的使用方法
Jun 14 Python
解决Python3用PIL的ImageFont输出中文乱码的问题
Aug 22 Python
Python多线程模块Threading用法示例小结
Nov 09 Python
Scrapy框架实现的登录网站操作示例
Feb 06 Python
python和php学习哪个更有发展
Jun 17 Python
解决Keras使用GPU资源耗尽的问题
Jun 22 Python
Python字符串常规操作小结
Apr 03 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程序员的技术瓶颈分析
2011/07/17 PHP
mongo Table类文件 获取MongoCursor(游标)的实现方法分析
2013/07/01 PHP
PHP获取ip对应地区和使用网络类型的方法
2015/03/11 PHP
服务端 VBScript 与 JScript 几个相同特性的写法 By shawl.qiu
2007/03/06 Javascript
javascript Array.remove() 数组删除
2009/08/06 Javascript
父子窗体间传递JSON格式的数据的代码
2010/12/25 Javascript
基于jquery ajax 用户无刷新登录方法详解
2012/04/28 Javascript
jQuery.clean使用方法及思路分析
2013/01/07 Javascript
js+div实现图片滚动效果代码
2014/02/10 Javascript
浅谈jquery事件处理
2015/04/24 Javascript
Avalon中文长字符截取、关键字符隐藏、自定义过滤器
2016/05/18 Javascript
AngularJS使用指令增强标准表单元素功能
2016/07/01 Javascript
jquery uploadify如何取消已上传成功文件
2017/02/08 Javascript
Vue项目中设置背景图片方法
2018/02/21 Javascript
vue iview实现动态路由和权限验证功能
2018/04/17 Javascript
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
layer的prompt弹出框,点击回车,触发确定事件的方法
2019/09/06 Javascript
微信浏览器下拉黑边解决方案 wScroollFix
2020/01/21 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
Python Web框架Flask下网站开发入门实例
2015/02/08 Python
Python的Flask框架中web表单的教程
2015/04/20 Python
对Python3+gdal 读取tiff格式数据的实例讲解
2018/12/04 Python
python 多进程并行编程 ProcessPoolExecutor的实现
2019/10/11 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
Django mysqlclient安装和使用详解
2020/09/17 Python
如何快速一次性卸载所有python包(第三方库)呢
2020/10/20 Python
使用Python封装excel操作指南
2021/01/29 Python
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
介绍一下结构化程序设计方法和面向对象程序设计方法的区别
2012/06/27 面试题
法律工作求职自荐信
2013/10/31 职场文书
有趣的广告词
2014/03/18 职场文书
机关办公室岗位职责
2014/04/16 职场文书
个人事迹材料范文
2014/12/29 职场文书
2015年复活节活动总结
2015/02/27 职场文书
2016年敬老月活动总结
2016/04/05 职场文书
python开发人人对战的五子棋小游戏
2022/05/02 Python