python中如何使用正则表达式的非贪婪模式示例

前言

本文主要给大家介绍了关于python使用正则表达式的非贪婪模式的相关内容,分享出来供大家参考学习,下面话不多说了,来一起详细的介绍吧。

在正则表达式里,什么是正则表达式的贪婪与非贪婪匹配

如:String str="abcaxc";

  Patter p="ab*c";

贪婪匹配:正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配。如上面使用模式p匹配字符串str,结果就是匹配到:abcaxc(ab*c)。

非贪婪匹配:就是匹配到结果就好,就少的匹配字符。如上面使用模式p匹配字符串str,结果就是匹配到:abc(ab*c)。

解决这个问题,可以采用:

正则引擎默认是贪婪的,当出现"*"时,它会尽量去匹配尽可能长的字符串。

一个用于修正以上问题的可能方案是用"*"的惰性代替贪婪性。你可以在"*"后面紧跟一个问号"?"来达到这一点 
这告诉正则引擎,尽可能少的重复上一个字符。

如下面的例子:

#python 3. 6
#蔡军生
#http://blog.csdn.net/caimouse/article/details/51749579
#
from re_test_patterns import test_patterns 

test_patterns(
 'abbaabbba',
 [('ab*?', 'a followed by zero or more b'),
  ('ab+?', 'a followed by one or more b'),
  ('ab??', 'a followed by zero or one b'),
  ('ab{3}?', 'a followed by three b'),
  ('ab{2,3}?', 'a followed by two to three b')],
) 

输出结果如下:

'ab*?' (a followed by zero or more b)

 'abbaabbba'
 'a'
 ...'a'
 ....'a'
 ........'a'

'ab+?' (a followed by one or more b)

 'abbaabbba'
 'ab'
 ....'ab'

'ab??' (a followed by zero or one b)

 'abbaabbba'
 'a'
 ...'a'
 ....'a'
 ........'a'

'ab{3}?' (a followed by three b)

 'abbaabbba'
 ....'abbb'

'ab{2,3}?' (a followed by two to three b)

 'abbaabbba'
 'abb'
 ....'abb'

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • 比较详细Python正则表达式操作指南(re使用)

    就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,(在Python中)它内嵌在Python中,并通过 re 模块实现.使用这个小型语言,你可以为想要匹配的相应字符串集指定规则:该字符串集可能包含英文语句.e-mail地址.TeX命令或任何你想搞定的东西.然後你可以问诸如"这个字符串匹配该模式吗?"或"在这个字符串中是否有部分匹配该模式呢?".你也可以使用 RE 以各种方式来修改或分割字符串. 正则表达式模式被编译成一系列的字节码,然後由用 C

  • python中使用正则表达式的连接符示例代码

    前言 我们在前面的例子里,我们学习使用集合里字符或非集合里的字符,这时都是要把每个字符写出来的,但是有时需要把26个小写字母都放到集合里,那么按集合的方法,得输入26次,一个一个键入去,这样比较花时间,也容易出错,那么有没有更好的方法呢?这个是有的,就是使用正则表达式的连接符的功能:-,比如表示26个小写字符,就使用[a-z]就可以了. 本文详细的给大家介绍了关于python使用正则表达式的连接符的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 例子如下: #pyth

  • 教你学会使用Python正则表达式

    今天写爬虫偶然想到了初学正则表达式时候,看过一篇文章非常不错.检索一下还真的找到了. re模块 re.search 经常用match = re.search(pat, str)的形式.因为有可能匹配不到,所以re.search()后面一般用if statement. re.match re.match和re.search很相似,只是re.match是从字符串的开头开始匹配. 常用正则字符意义 a, X, 9,等字符匹配自己, 元字符不匹配自己,因为有特殊意义,比如 . ^ $ * + ? { }

  • python正则表达式re模块详细介绍

    本模块提供了和Perl里的正则表达式类似的功能,不关是正则表达式本身还是被搜索的字符串,都可以是Unicode字符,这点不用担心,python会处理地和Ascii字符一样漂亮. 正则表达式使用反斜杆(\)来转义特殊字符,使其可以匹配字符本身,而不是指定其他特殊的含义.这可能会和python字面意义上的字符串转义相冲突,这也许有些令人费解.比如,要匹配一个反斜杆本身,你也许要用'\\\\'来做为正则表达式的字符串,因为正则表达式要是\\,而字符串里,每个反斜杆都要写成\\. 你也可以在字符串前加上

  • python利用正则表达式搜索单词示例代码

    前言 在python中,通过内嵌集成re模块,程序媛们可以直接调用来实现正则匹配.正则表达式模式被编译成一系列的字节码,然后由用C编写的匹配引擎执行. 比如下面的例子,就是用来从一段文字里查找一个单词,如下: 示例代码 import re pattern = 'this' text = 'http://blog.csdn.net/caimouse is great, this is great way!' match = re.search(pattern, text) s = match.st

  • Python使用正则表达式过滤或替换HTML标签的方法详解

    本文实例讲述了Python使用正则表达式过滤或替换HTML标签的方法.分享给大家供大家参考,具体如下: python正则表达式关键内容: python正则表达式转义符: . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配字符串的开始 $ 匹配字符串的结束 \W 匹配任意不是字母,数字,下划线,汉字的字符 \S 匹配任意不是空白符的字符 \D 匹配任意非数字的字符 \B 匹配不是单词开头或结束的位置 [^

  • python中如何使用正则表达式的集合字符示例

    前言 本文主要给大家介绍了关于python使用正则表达式的集合字符的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 在正则表达式里,想匹配一些字符中的一个,也就是说给出一个字符的集合,只要出现这个集合里任意的字符,都是成立的.比如[ab],就是将匹配任意出现a或b的字符.比如a[ab]+,它是贪婪模式,将会匹配所有是a后面的a或b的字符串,如abbaabbba.如果要改为非贪婪模式,要在后面添加?,如下面的例子: 示例代码 #python 3.6 #蔡军生 #http

  • Python正则表达式知识汇总

    1. 正则表达式语法 1.1 字符与字符类   1 特殊字符:\.^$?+*{}[]()| 以上特殊字符要想使用字面值,必须使用\进行转义   2 字符类      1. 包含在[]中的一个或者多个字符被称为字符类,字符类在匹配时如果没有指定量词则只会匹配其中的一个.   2. 字符类内可以指定范围,比如[a-zA-Z0-9]表示a到z,A到Z,0到9之间的任何一个字符   3. 左方括号后跟随一个^,表示否定一个字符类,比如[^0-9]表示可以匹配一个任意非数字的字符.   4. 字符类内部,

  • python中通过预先编译正则表达式提高效率

    前言 在re的正则表达式模块里,可以通过模块的方式来访问正则表达式,但是如果重复多次地使用正则表达式,最好是使用compile函数把正则表达式编译成对象RegexObject,这样会大大地提高搜索的效率,因为基于非编译方式访问时,是使用模块里的一小块缓冲来进行的. 如下面的例子: import re # Precompile the patterns regexes = [ re.compile(p) for p in ['this', 'that'] ] text = 'http://blog

  • python利用正则表达式排除集合中字符的功能示例

    前言 我们在之前学习过通过集合枚举的功能,把所有需要出现的字符列出来,保存在集合里面,这样正则表达式就可以根据集合里的字符是否存在来判断是否匹配成功,如果在集合里,就匹配成功,否则不成功.现在有一个问题,就是要把集合里列出的字符都不能出现才匹配成功,这个需求怎么样实现呢?其实比较简单,只需要在集合前面添加一个字符^,就让正则表达式匹配时,发现有字符在集合里就匹配不成功.下面话不多说了,来一起看看详细的介绍吧. 例子如下: #python 3.6 #蔡军生 #http://blog.csdn.ne

随机推荐