python里使用正则表达式的非捕获模式

原创 2017年10月25日 17:43:08
在前面使用了分组的模式来匹配正则表达式,比如'a((a+)|(b+))'的分组功能,就会产生三组值返回,如下:
'a((a+)|(b+))' (capturing form)


  'abbaabbba'
  'abb'        ('bb', None, 'bb')
     'aa'      ('a', 'a', None)
第一组((a+)|(b+))是匹配第一组返回 'bb', 第二组(a+)匹配返回None, 第三组(b+)返回'bb'。
有时我们只想需要第一组的结果,后面第二组和第三组不要返回,也就是把None和'bb'丢掉,怎么办呢?也许有同学说,直接把后面的组去掉不就行了吗?显然不行的,因为需要匹配过程,但结果不要,如果不要后面的分组就达不到匹配了。其实这种情况,就是只要过程不要结果,不希望匹配结果返回来。因此,需要使用一种新的语法:(?:pattern)。使用?:之后这个组的正则表达式只负责匹配,但不返回结果。用下面的例子来测试一下:
#python 3.6
#蔡军生 
#http://blog.csdn.net/caimouse/article/details/51749579
#
from re_test_patterns_groups import test_patterns

test_patterns(
    'abbaabbba',
    [(r'a((a+)|(b+))', 'capturing form'),
     (r'a((?:a+)|(?:b+))', 'noncapturing')],
)

结果输出如下:

'a((a+)|(b+))' (capturing form)


  'abbaabbba'
  'abb'        ('bb', None, 'bb')
     'aa'      ('a', 'a', None)


'a((?:a+)|(?:b+))' (noncapturing)


  'abbaabbba'
  'abb'        ('bb',)
     'aa'      ('a',)

比较捕获模式和非捕获模式时,就会发现第二个结果比第一个少后面组返回,达到了目标。

深入浅出Numpy
http://edu.csdn.net/course/detail/6149 

Python游戏开发入门

http://edu.csdn.net/course/detail/5690

你也能动手修改C编译器

http://edu.csdn.net/course/detail/5582

纸牌游戏开发

http://edu.csdn.net/course/detail/5538 

五子棋游戏开发

http://edu.csdn.net/course/detail/5487
RPG游戏从入门到精通
http://edu.csdn.net/course/detail/5246
WiX安装工具的使用
http://edu.csdn.net/course/detail/5207
俄罗斯方块游戏开发
http://edu.csdn.net/course/detail/5110
boost库入门基础
http://edu.csdn.net/course/detail/5029
Arduino入门基础
http://edu.csdn.net/course/detail/4931
Unity5.x游戏基础入门
http://edu.csdn.net/course/detail/4810
TensorFlow API攻略
http://edu.csdn.net/course/detail/4495
TensorFlow入门基本教程
http://edu.csdn.net/course/detail/4369
C++标准模板库从入门到精通 
http://edu.csdn.net/course/detail/3324
跟老菜鸟学C++
http://edu.csdn.net/course/detail/2901
跟老菜鸟学python
http://edu.csdn.net/course/detail/2592
在VC2015里学会使用tinyxml库
http://edu.csdn.net/course/detail/2590
在Windows下SVN的版本管理与实战 
http://edu.csdn.net/course/detail/2579
Visual Studio 2015开发C++程序的基本使用 
http://edu.csdn.net/course/detail/2570
在VC2015里使用protobuf协议
http://edu.csdn.net/course/detail/2582
在VC2015里学会使用MySQL数据库
http://edu.csdn.net/course/detail/2672


版权声明:本文为博主原创文章,未经博主允许不得转载。

正则表达式的非捕获组

ref: http://www.cnblogs.com/graphics/archive/2010/06/02/1749707.html http://www.cnblogs.com/yaku...
  • huludan
  • huludan
  • 2017年01月10日 12:34
  • 1298

Python正则表达式--无捕获组和命名组

精心设计的 REs 也许会用很多组,既可以捕获感兴趣的子串,又可以分组和结构化 RE 本身。在复杂的 REs 里,追踪组号变得困难。有两个功能可以对这个问题有所帮助。它们也都使用正则表达式扩展的通用语...
  • lwnylslwnyls
  • lwnylslwnyls
  • 2013年05月08日 17:01
  • 2448

正则表达式之捕获型分组与非捕获型分组

使用小括号指定一个子表达式后,匹配这个子表达式的文本(也就是此分组捕获的内容)可以在表达式或其它程序中作进一步的处理。 捕获组  语法:  字符  ...
  • xqg666666
  • xqg666666
  • 2015年04月09日 09:45
  • 964

JavaScript正则表达式分组模式:捕获性分组与非捕获性分组及前瞻后顾(断言)

javascript正则表达式里分组模式以小括号来()表示分组,例:/([a-z])/捕获性分组:正则表达式在开启捕获性分组工作模式时会把每个分组里的值保存起来,有时候我们需要利它来完成一些工作。 ...
  • lihefei_coder
  • lihefei_coder
  • 2016年11月03日 15:49
  • 2084

JAVA正则表达式-捕获组与非捕获组

转载自: http://mcj8089.iteye.com/blog/1183075  Java捕获组与非捕获组的问题困扰了我一阵子,下面是我弄明白后的笔记:先看例子:import java.util...
  • luojinbai
  • luojinbai
  • 2015年11月28日 11:28
  • 1339

Python 正则表达式里面 贪婪模式和非贪婪模式的区别

贪婪模式 :匹配到了,继续往下走,看看剩下的还没有可以匹配的, 非贪婪模式: 匹配到了,就不继续往下走了. 比如    贪婪模式 源字符串    aa11bb22cc 正则表达式    .* 输出...
  • qq_33447462
  • qq_33447462
  • 2016年05月24日 00:16
  • 2667

正则表达式知识详解之贪婪模式和非贪婪模式 (java版示例)

正则表达式知识详解系列,通过代码示例来说明正则表达式知识,建议自己按照例子手打一遍。 本示例的源代码下载地址:http://download.csdn.net/detail/gnail_oug/95...
  • gnail_oug
  • gnail_oug
  • 2016年04月27日 12:59
  • 1744

正则表达式中的捕获和非捕获

之前我们在做例子的时候,我们看到过这种捕获的形式,我们也试过反向引用。那像我们捕获的内容,可以通过一个正则表达式的模式,或者部分模式两边添加圆括号将导致相关匹配存储到一个临时缓冲区中,所捕获的每个子匹...
  • lidiya007
  • lidiya007
  • 2016年09月23日 18:06
  • 240

python 正则表达式贪婪模式与非贪婪模式

之前未接触过正则表达式,今日看python网络爬虫的源码,里面一行正则表达式匹配的代码初看之下,不是很理解,代码如下:myItems = re.findall('(.*?)',unicodePage,...
  • haoxizh
  • haoxizh
  • 2015年03月26日 12:00
  • 7863

正则表达式贪婪模式与非贪婪模式

1.定义:什么是贪婪模式与非贪婪模式 string str="abcaxc"; string regex="ab\w*c"; 贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为。 ...
  • cherish1forever
  • cherish1forever
  • 2015年10月13日 14:55
  • 1781
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python里使用正则表达式的非捕获模式
举报原因:
原因补充:

(最多只允许输入30个字)