分组在re模块中的使用
- import re
- #search
- s = "<a>wahaha</a>" #标签语言 html 和 web相关
- ret= re.search("(>)(\w+)(<)",s)
- print(ret.group()) #>wahaha< 和print(ret.group(0))结果一样
- print(ret.group(1)) #> 数字参数代表取对应分组中的内容
- print(ret.group(2)) #wahaha
- print(ret.group(3)) #<
- # search分组 通过数字显示
- # findall
- # 为了findall可以顺利取到分组中的内容,有一种特殊的语法,就是优先显示分组内容
- ret= re.findall(">\w+<",s)
- print(ret) #['>wahaha<']
- ret= re.findall(">(\w+)<",s) #加括号会优先显示(\w+)的内容,两边的> < 就不显示了
- print(ret) #['wahaha']
- # 取消分组优先(?: 正则表达式)
- ret= re.findall("\d+(\.\d+)?", "1.234.5.678")
- print(ret) #['.234', '.678'] python把正则中的括号当成了优先分组,所以取出来的是小数点之后的,
- # 因为正则规则用了()规定小数,所以函数会当成优先级执行
- ret2= re.findall("\d+(?:\.\d+)?", "1.234.5.678") #在括号中加上?: 可以取消优先级
- print(ret2) #['1.234', '5.678']
- #split
- #没有分组的时候会把切掉的内容不显示,加上分组会一起显示出来
- ret = re.split("\d+","alex29egon30")
- print(ret) #['alex', 'egon', '']
- ret = re.split("(\d+)","alex29egon30")
- print(ret) #['alex', '29', 'egon', '30', '']
- #分组命名 (?P<这个组的名字>正则表达式)
- s = '<a>wahaha</a>'
- ret = re.search('>(?P<name>\w+)<',s)#把想取出来的wahaha单独括起来了,并且加了 ?P 和一个名字 (name)
- print(ret.group()) #>wahaha<
- print(ret.group(1)) #wahaha 因为就一个分组,所以直接取wahaha
- print(ret.group('name')) #wahaha 也可以通过组名取值
- s = '<a>wahaha</a>'
- pattern = '<(\w+)>(\w+)</(\w+)>'
- ret = re.search(pattern,s)
- print(ret.group(1) == ret.group(3)) # True 判断前后两个标签名 a a 字是否一致
- s = '<a>wahaha</A>'
- pattern = '<(\w+)>(\w+)</(\w+)>'
- ret = re.search(pattern,s)
- print(ret.group(1) == ret.group(3)) # False 判断前后两个标签名 a A 字是否一致
- # 使用前面的分组 要求使用这个名字的分组和前面同名分组中的内容匹配的必须一致
- s = '<a>wahaha</A>'
- pattern = '<(?P<tab>\w+)>(\w+)</(?P=tab)>'
- ret = re.search(pattern,s)
- print(ret) #None 前后分组的名字不一致, 返回None
- s = '<a>wahaha</a>'
- pattern = '<(?P<tab>\w+)>(\w+)</(?P=tab)>' #要求使用这个名字的分组和前面同名分组中的内容匹配的必须一致
- ret = re.search(pattern,s)
- print(ret.group(2))
- s = '<a>wahaha</a>'
pattern = '<(?P<tab>\w+)>(\w+)</(?P=tab)>' #要求使用这个名字的分组和前面同名分组中的内容匹配的必须一致
ret = re.findall(pattern,s)
print(ret) #[('a', 'wahaha')]- s = '<a>wahaha</a>'
pattern = r'<(\w+)>(\w+)</(\1)>' #\1 直接表示了第一个()里的内容, 这个没有tab,没有组名,直接用数字表达了,但是需要在字符串前加上一个r, 对\1转义
ret = re.findall(pattern,s)
print(ret) #[('a', 'wahaha', 'a')]
- # 这些情况会用到
# 2018-12-06
# 2018.12.6
# 2018 12 06
# 12:30:30
分组在re模块中的使用的更多相关文章
- 分组在re模块中的使用以及使用正则表达式的技巧
1.split:切割 使用split不会返回被切割的字符 import re ret = re.split("\d+","5as46asf46asf46a") ...
- python基础:os模块中关于文件/目录常用的函数使用方法
Python是跨平台的语言,也即是说同样的源代码在不同的操作系统不需要修改就可以同样实现 因此Python的作者就倒腾了OS模块这么一个玩意儿出来,有了OS模块,我们不需要关心什么操作系统下使用什么模 ...
- os模块中关于文件/目录常用的函数使用方法
os模块中关于文件/目录常用的函数使用方法 函数名 使用方法 getcwd() 返回当前工作目录 chdir(path) 改变工作目录 listdir(path='.') 列举指定目录中的文件名('. ...
- 18 os/os.path模块中关于文件/目录常用的函数使用方法 (转)
os模块中关于文件/目录常用的函数使用方法 函数名 使用方法 getcwd() 返回当前工作目录 chdir(path) 改变工作目录 listdir(path='.') 列举指定目录中的文件名('. ...
- os、os.path模块中关于文件、目录常用的函数使用方法
os模块中关于文件/目录常用的函数使用方法 函数名 使用方法 getcwd() 返回当前工作目录 chdir(path) 改变工作目录 listdir(path='.') 列举 ...
- python编程os、os.path 模块中关于文件、目录常用的函数使用方法
os模块中关于文件/目录常用的函数使用方法 函数名 使用方法 getcwd() 返回当前工作目录 chdir(path) 改变工作目录 listdir(path='.') 列举指定目录中的文件名( ...
- 0802_转载-nn模块中的网络层介绍
0802_转载-nn 模块中的网络层介绍 目录 一.写在前面 二.卷积运算与卷积层 2.1 1d 2d 3d 卷积示意 2.2 nn.Conv2d 2.3 转置卷积 三.池化层 四.线性层 五.激活函 ...
- Nginx基础知识之————RTMP模块中的中HLS专题(翻译文档)
一.在Nginx配置文件的RTMP模块中配置hls hls_key_path /tmp/hlskeys; 提示错误信息: nginx: [emerg] the same path name " ...
- 一个Angular模块中可以声明哪些组件?
一个Angular模块中可以声明哪些组件? (1) controller 控制器 (2) directive 指令 (3) function ...
随机推荐
- 2-21-源码编译安装LAMP
编译安装LAMP所需要及其所使用的源码版本: httpd version:httpd-2.4.16 apr version:apr-1.5.2 pcre version:pcre-8.37 apr ...
- C# Textbox的ImeMode取值对中文输入法的影响(进入才能看清)
原文:C# Textbox的ImeMode取值对中文输入法的影响(进入才能看清) C# Textbox的ImeMode取值对中文输入法的影响 取值 五笔加加 微软拼音3.0 搜 ...
- Lambda表达式的参数捕获
以常用的Action委托为例: 有如下3个无参数的方法: public void Function() { //Do something } public void Function2() { //D ...
- ubuntu 16.04 安装 openjdk 1.7
由于编译Android源码需要openjdk1.7.X版本.ubuntu 16.04自带openjdk为1.8.X版本. sudo apt-get install openjdk-7-jre 或者su ...
- cn_sql_server_2012_enterprise_edition_x86_x64_dvd_813295 序列号
cn_sql_server_2012_enterprise_edition_x86_x64_dvd_813295 序列号 MICROSOFT SQL SERVER 2012 ENTERPRISE CO ...
- 【转】python Counter模块
>>> c = Counter() # 创建一个新的空counter >>> c = Counter('abcasdf') # 一个迭代对象生成的counter & ...
- 什么是.NET Native?
使用CoreRT将.NET Core发布为Native应用程序 - KAnts - 博客园 http://www.cnblogs.com/ants/p/8630332.html Microsoft . ...
- C# 委托参数方法实例
/// <summary> /// 方法委托 /// </summary> /// <param name="dwEnrollNum">< ...
- 分布式存储系统GlusterFS初体验
摘要: GlusterFS是Scale-Out存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端.GlusterFS ...
- 不一样的go语言-玩转语法之二
本文继续玩转语法,是为之二. I/O(Input/Output),输入输出是计算机最为突出的特点,也可以说是计算机最为核心的功能.没有I/O,计算机就是一堆废铜废铁.从最低层的电子元器件开始, ...