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

前言
正则表达式的基础知识就不说了,有兴趣的可以点击这里,提取一般分两种情况,一种是提取在文本中提取单个位置的字符串,另一种是提取连续多个位置的字符串。日志分析会遇到这种情况,下面我会分别讲一下对应的方法。
一、单个位置的字符串提取
这种情况我们可以使用(.+?)这个正则表达式来提取。 举例,一个字符串”a123b”,如果我们想提取ab之间的值123,可以使用findall配合正则表达式,这样会返回一个包含所以符合情况的list。
代码如下:

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

登录后复制

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

import restr = "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 = "a23ba34b"re.findall(r"a(d+)b.+a(d+)b", str)#输出[]#因为不能处理str中间有换行的情况re.findall(r"a(d+)b.+a(d+)b", str, re.S)#s输出[('23', '34')]

登录后复制

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

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

登录后复制

二、连续多个位置的字符串提取
这种情况我们可以使用

(?P…)

登录后复制

这个正则表达式来提取。举例,如果我们有一行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"'

登录后复制

,我们想提取这行日志里面所有的内容,可以写多个

(?Pexpr)

登录后复制

来提取,其中name可以更改为你为该位置字符串命名的变量,expr改成提取位置的正则即可。
代码如下:

import reline ='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[^ ]*) (?P[^ ]*) "(?P[^"]*)" (?P[^ ]*) (?P[^ ]*) "(?P[^"]*)" "(?P[^"]*)"')regMatch = reg.match(line)linebits = regMatch.groupdict()print linebitsfor k, v in linebits.items() : print k+": "+v

登录后复制

输出的结果为:

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

登录后复制

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

<!–

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

–>

以上就是python利用正则表达式提取字符串的方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2275426.html

(0)
上一篇 2025年2月27日 14:33:20
下一篇 2025年2月19日 21:22:06

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Python学习基础之字符串处理了解

    Python字符串处理字符串输入: my_string = raw_input(“please input a word:”) 登录后复制 字符串判断:(1) 判断是不是纯字母 my_string.isalpha() 登录后复制 字符串搜索…

    编程技术 2025年2月27日
    200
  • 什么是字符串?(2)转义字符与运算符

    在之前的文章之中我们了解了python字符串,以及知道了一些字符串的使用方法,学会了如何进行python字符串截取以及更新修改字符串。这些都是属于比较简单的一些字符串的处理方法,接下来我们继续来对字符串进行了解以及学习。 python转义字…

    2025年2月27日
    200
  • Python字符串的处理那些事

    本章介绍了python字符串的编写与处理,在之前,我们搞清楚了令人头疼的字符编码问题后,我们再来研究python的字符串。 在最新的Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言,例如: &…

    编程技术 2025年2月27日
    200

发表回复

登录后才能评论