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游戏开发入门

你也能动手修改C编译器

纸牌游戏开发

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


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/caimouse/article/details/78344230

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

在前面学习了非捕获模式,也许有些同学还是很不了解它的应用,那么我们就来一个具体一些的例子,这样就会更加深入地了解它的应用意图。比如有一天自己兴趣来了,想写一个爬虫,去爬https://stackove...
  • caimouse
  • caimouse
  • 2017-10-27 16:11:36
  • 985

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

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

Python异常捕获与处理

转载自: JmilkFan:http://blog.csdn.net/jmilk 异常 异常即非正常状态,在Python中使用异常对象来表示异常。若程序在编译或运行过程中发生错误,...
  • zong596568821xp
  • zong596568821xp
  • 2017-10-09 10:43:20
  • 4472

python捕获警告的方法

python捕获警告, try: ... except warning as e: ...
  • YMD8005
  • YMD8005
  • 2017-09-14 15:11:51
  • 516

[正则]正则表达式 捕获型括号和非捕获型括号

正则表达式 捕获型括号和非捕获型括号对于括号中的子表达式,正则表达式会将匹配的子表达式进行存储。问题描述import re PATH='/Users/Michael/.../app_stat.sh' ...
  • cn_wk
  • cn_wk
  • 2016-11-23 21:04:00
  • 631

正则表达式的非捕获组

ref: http://www.cnblogs.com/graphics/archive/2010/06/02/1749707.html http://www.cnblogs.com/yaku...
  • huludan
  • huludan
  • 2017-01-10 12:34:24
  • 1696

python异常如何全面捕获

如果你在写程序时遇到异常后想进行如下处理的话请参考我下面写的对异常处理的方法: 假设有下面的一段程序: try:     语句1     语句2     .     语句N except...
  • abcd1f2
  • abcd1f2
  • 2016-04-12 15:32:12
  • 519

Python: 捕获异常然后再抛出另一个异常的正确姿势

转载:https://mozillazg.github.io/2016/08/python-the-right-way-to-catch-exception-then-reraise-another-...
  • liuyuan_jq
  • liuyuan_jq
  • 2017-04-07 11:37:51
  • 2454

关于正则表达式——捕获型括号和非捕获型括号

对于括号中的子表达式,正则表达式会将匹配的字符串
  • yangnianbing110
  • yangnianbing110
  • 2014-10-20 22:15:44
  • 3267

正则表达式非捕获型括号和捕获型括号

(?: pattern)是非捕获型括号   匹配pattern,但不捕获匹配结果。 (pattern )是捕获型括号。 匹配pattern,匹配pattern并捕获结果,自动获取组号 (? pa...
  • okyoung188
  • okyoung188
  • 2016-11-08 14:38:48
  • 895
收藏助手
不良信息举报
您举报文章:python里使用正则表达式的非捕获模式
举报原因:
原因补充:

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