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中关键字is与==的区别简述
Jul 31 Python
在Django框架中设置语言偏好的教程
Jul 27 Python
python数据清洗系列之字符串处理详解
Feb 12 Python
Python算术运算符实例详解
May 31 Python
django使用html模板减少代码代码解析
Dec 12 Python
说说如何遍历Python列表的方法示例
Feb 11 Python
python 利用turtle模块画出没有角的方格
Nov 23 Python
4行Python代码生成图像验证码(2种)
Apr 07 Python
基于python计算并显示日间、星期客流高峰
May 07 Python
pycharm设置默认的UTF-8编码模式的方法详解
Jun 01 Python
python中怎么表示空值
Jun 19 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
Mar 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
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
来自PHP.NET的入门教程
2006/10/09 PHP
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
Mac系统完美安装PHP7详细教程
2017/06/06 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
用JQuery 实现AJAX加载XML并解析的脚本
2009/07/25 Javascript
实现连缀调用的map方法(prototype)
2009/08/05 Javascript
javascript淡入淡出效果的实现思路
2012/03/31 Javascript
js nextSibling属性和previousSibling属性概述及使用注意
2013/02/16 Javascript
jQuery实现点击该行即可删除HTML表格行
2014/10/17 Javascript
JQuery 两种方法解决刚创建的元素遍历不到的问题
2016/04/13 Javascript
Bootstrap的Refresh Icon也spin起来
2016/07/13 Javascript
利用C/C++编写node.js原生模块的方法教程
2017/07/07 Javascript
使用jQuery实现动态添加小广告
2017/07/11 jQuery
ReactNative列表ListView的用法
2017/08/02 Javascript
深入浅出理解JavaScript闭包的功能与用法
2018/08/01 Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
Javascript柯里化实现原理及作用解析
2020/10/22 Javascript
讲解Python的Scrapy爬虫框架使用代理进行采集的方法
2016/02/18 Python
Python中Scrapy爬虫图片处理详解
2017/11/29 Python
Python使用matplotlib简单绘图示例
2018/02/01 Python
Numpy数组的保存与读取方法
2018/04/04 Python
使用Python如何测试InnoDB与MyISAM的读写性能
2018/09/18 Python
Python 从一个文件中调用另一个文件的类方法
2019/01/10 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
2019/11/29 Python
利用python中的matplotlib打印混淆矩阵实例
2020/06/16 Python
Python使用shutil模块实现文件拷贝
2020/07/31 Python
Pamela Love官网:纽约设计师Pamela Love的精美、时尚和穿孔珠宝
2020/10/19 全球购物
理工大学毕业生自荐信
2013/11/01 职场文书
买房委托公证书
2014/04/08 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
毕业横幅标语
2014/10/08 职场文书
2014年社区计生工作总结
2014/11/18 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
保险公司增员口号
2015/12/25 职场文书
详细分析PHP7与PHP5区别
2021/06/26 PHP