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

原创 2017年10月27日 16:11:36
在前面学习了非捕获模式,也许有些同学还是很不了解它的应用,那么我们就来一个具体一些的例子,这样就会更加深入地了解它的应用意图。比如有一天自己兴趣来了,想写一个爬虫,去爬https://stackoverflow.com网站,发现需要分析这个网站地址,也就是把这些地址进行分离,判断那一些已经是重复了。比如下面两个地址:
'https://stackoverflow.com/'
'https://stackoverflow.com/questions/tagged/regex'
可以使用前面学习过的正则表达式来分析,比如要求如下:
 'https://stackoverflow.com/'  ('https', 'stackoverflow.com', '/')
 就是把地址分析不同的子串,这时你就会想到使用分组正则表达式的功能。但是你也许不关心https,需要把这串丢掉它,怎么办呢?这时就需要使用非捕获模式了(?:)。例子如下:
#python 3.6
#蔡军生 
#http://blog.csdn.net/caimouse/article/details/51749579
#
from re_test_patterns_groups import test_patterns

test_patterns(
    'https://stackoverflow.com/',
    [(r'(https?|ftp)://([^/\r\n]+)(/[^\r\n]*)?', 'capturing'),
     (r'(?:https?|ftp)://([^/\r\n]+)(/[^\r\n]*)?', 'non-capturing')],
)

test_patterns(
    'https://stackoverflow.com/questions/tagged/regex',
    [(r'(https?|ftp)://([^/\r\n]+)(/[^\r\n]*)?', 'capturing'),
     (r'(?:https?|ftp)://([^/\r\n]+)(/[^\r\n]*)?', 'non-capturing')],
)


 结果输出如下:
 '(https?|ftp)://([^/\\r\\n]+)(/[^\\r\\n]*)?' (capturing)


  'https://stackoverflow.com/'
  'https://stackoverflow.com/'  ('https', 'stackoverflow.com', '/')


'(?:https?|ftp)://([^/\\r\\n]+)(/[^\\r\\n]*)?' (non-capturing)


  'https://stackoverflow.com/'
  'https://stackoverflow.com/'  ('stackoverflow.com', '/')


'(https?|ftp)://([^/\\r\\n]+)(/[^\\r\\n]*)?' (capturing)


  'https://stackoverflow.com/questions/tagged/regex'
  'https://stackoverflow.com/questions/tagged/regex'  ('https', 'stackoverflow.com', '/questions/tagged/regex')


'(?:https?|ftp)://([^/\\r\\n]+)(/[^\\r\\n]*)?' (non-capturing)


  'https://stackoverflow.com/questions/tagged/regex'
  'https://stackoverflow.com/questions/tagged/regex'  ('stackoverflow.com', '/questions/tagged/regex')

 这样就达到实现的目标了,很轻松就完成了任务。

深入浅出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


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

正则表达式的非捕获组

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

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

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

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

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

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

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

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

捕获组  语法:  字符 描述 示例 (pattern) 匹配pattern并捕获结果,自动设置组号。 ...
  • s464036801
  • s464036801
  • 2012年06月05日 14:01
  • 2395

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

 捕获组 语法: 字符  描述 示例 (pattern) 匹配pattern并捕获结果,自动设置组号。  (ab...
  • XueminXu
  • XueminXu
  • 2014年08月28日 14:38
  • 778

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

(?: pattern)是非捕获型括号   匹配pattern,但不捕获匹配结果。 (pattern )是捕获型括号。 匹配pattern,匹配pattern并捕获结果,自动获取组号 (? pa...
  • okyoung188
  • okyoung188
  • 2016年11月08日 14:38
  • 806

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

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

正则表达式 非捕获性分组

非捕获性分组语法为(?:pattern),即将pattern部分组合成一个可统一操作的组合项,但不把这部分内容当作子匹配捕获,匹配的内容部进行编号也不存储在缓冲区中供以后使用。非捕获性分组方法在必须进...
  • lt3487928
  • lt3487928
  • 2016年10月24日 16:40
  • 546

javascript正则表达式分组-捕获性分组/非捕获性分组/正则前瞻

捕获性分组 vs. 非捕获性分组 捕获性分组(...)就是捕获分组所匹配的内容暂且存储在某个地方,以便下次使用,捕获性分组以(...)表示,有些地方将取得捕获性分组所匹配结果的过程称之为"反向引用...
  • cajan2
  • cajan2
  • 2016年04月12日 20:23
  • 1464
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python里使用正则表达式的非捕获模式实例二
举报原因:
原因补充:

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