• 欢迎访问挑战自我博客网站,安全研究,web渗透,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入挑战自我博客网站 网站主页

与读者就python中正则表达式贪婪匹配的一次研究探讨

读者交流 挑战自我 639次浏览 已收录 0个评论

1、文章背景

前面一个网站读者问我一个问题,由于工作关系,我没法抽出身去研究,后面他退群了,我深表遗憾,开设博客的目的就是旨在和大家交流研究,但是我也不是指着这个吃饭的,工作关系可能没有第一时间回复大家,但是大家问我的问题,只要我会的,我都会一一研究,不会的我也只会更加感兴趣的去另外请教高人,总之最后肯定会给你一个答复。

前几天和一个读者探讨了python中正则表达式的一些问题:

1、.+?的作用
2、正则表达式的贪婪模式

2、分析细节

其实一直对正则表达式研究的不是特别深入,那天就借着探讨的机会和读者一起研究了下,主要是刚好有时间。

2.1、.+?正则表达式含义解释

首先,简单解释下.+?正则表达式的含义:

.:除了换行符,它可以匹配任意字符
+:匹配前一个字符一次或者无限次
?:匹配前一个字符0次或者1次

2.2、简单示例

接着,我们举一个例子来对这个正则表达式做一些具体说明:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import re

#待过滤的字符串
str1 = "test1test2test3"
str2 = "*abc*abc*"

#正则过滤表达式
filter1 = ".+"
filter2 = ".+?"
filter3 = "\*.+\*"
filter4 = "\*.+?\*"

#具体的结果输出
result_1_1 = re.compile(filter1).findall(str1)
print 'result_1_1 is %s' % result_1_1

result_1_2 = re.compile(filter2).findall(str1)
print 'result_1_2 is %s' % result_1_2

result_2_3 = re.compile(filter3).findall(str2)
print 'result_2_3 is %s' % result_2_3

result_2_4 = re.compile(filter4).findall(str2)
print 'result_2_4 is %s' % result_2_4

具体执行结果如下图所示:

与读者就python中正则表达式贪婪匹配的一次研究探讨

从输出结果可以计较清晰的分析出贪婪匹配与非贪婪匹配的区别,也就是途中的result_1_1与result_1_2、result_2_3与result_2_4之间的区别。下面我们着重分析下贪婪匹配与非贪婪匹配的含义。

2.3、正则表达式的贪婪与非贪婪匹配含义

贪婪与非贪婪解释:

贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。
非贪婪匹配:就是匹配到结果就好,就少的匹配字符。

如上面的代码,使用贪婪模式匹配字符串str2,结果就是匹配到:*abc*abc*
若使用非贪婪模式匹配字符串str2,结果就是匹配到:*abc*


挑战自我博客, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明与读者就python中正则表达式贪婪匹配的一次研究探讨
喜欢 (7)
支付宝[]
分享 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址