Re.Match 类的介绍 | 学习笔记

简介: 快速学习 Re.Match 类的介绍

开发者学堂课程【Python 入门 2020年版:Re.Match 类的介绍 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10443


Re.Match 类的介绍

内容介绍:

一、 re.Match 类介绍

二、 re.Match 属性和方法

三、 group 方法

 

一、 re.Match 介绍

调用 re.match 方法、re.search 方法,或者对 re.finditer 方法的结果进行遍历时,拿到的数据类型都是 re.Match 对象。

例如:

import re

m = re.search(r'm' , ' o3rjomjadas')

print(m)

输出的结果为:

#<re.Match object; span=(5,6), match= 'm '>

二、 re.Match 属性和方法

如果想看其中有哪些属性哪些方法,使用 dir,可以列出其中所有属性和方法。

print(dir(m))

结果会输出' endpos ', 'expand ', 'group', 'groupdict', 'groups ', 'lastgroup' 等等的很多方法和属性。

(一)、属性和方法

1、pos:搜索的开始位置

2、endpos:搜索的结束位置

3、string:搜索的字符串

4、re:当前使用的正则表达式对象

5、lastindex:最后匹配的组索引

6、lastgroup:最后匹配的组名

7、group(index):某个组匹配的结果

8、groups():所有分组的匹配结果,每个分组组成的结果以列表返回

9、groupdict():返回组名作为 key,每个分组的匹配结果作为 value 的字典

10、start([group]):获取组的开始位置

11、end([group]):获取组的结束位置

12、span([group]):匹配到的结果字符串的开始和结束下标

13、expend([template]):使用组的匹配结果来替换 template 的内容,并把替换后的字符串返回。

字母表达式规则:

表示任意字符;*表示出现任意次数

使用 group 方法可以获取匹配的字符串结果:

print(m.group())

group 可以作参,表示 n 个分组:

print(m.group(0))

(二)、例子

import re

p = re.compile(r"(abc)\1")

m = p.match("abcabcabc")

print m.group(0)

print m.group(1)

print m.group()

p = re.compile(r"(?P<one>abc)(?P=one)")

m = p.search("abcabcabc")

print m.group(0)

print m.group("one")

print m.groupdict().keys()

print m.groupdict().values()

print m.re.pattern

(三)、代码解析

第二行:定义了一个分组 "(abc)", 在后面使用 "\1" 再次调用该分组。即 compile() 返回 1 个包含 2 个分组的正则表达式对象 p.

第三行:p.match() 对字符串 "abcabcabc" 进行搜索,返回一个 match 对象 m

第四行:调用 match 对象的 group(0) 方法,将匹配整个表达式,输出结果: abcabc

第五行:调用 match 对象的 group(1) 方法,返回第一次匹配成功的结果,输出结果为:abc

第六行:默认情况下,返回分组 0 的结果,输出结果:abcabc

第八行:给分组命令,"?P<one>" 中的 "one" 表示分组的名称。"(?P=one)" 调用分组 "one",相当于 "\1"

第十行:输出分组 "one" 的结果,输出结果:abc

第十一行:获取正则表达式中分组的名称,输出结果为 : ['one']

第十二行:获取正则表达式中分组的内容,输出结果为 :['abc']

第十三行:

获取当前使用的正则表达式,输出结果: (?P<one>abc)(?P=one)

print(m.pos,m.endpos)

输出的结果为:0  11

pos 属性表示文本中正则表达式开始搜索的索引。值与 Pattern.match() 和Pattern.seach() 方法中的同名参数相同。

endpos 该属性表示文本中正则表达式结束搜索的索引。值与 Pattern.match( ) 和 Pattern.seach() 方法中的同名参数相同。

print(m.span())

输出的结果为:(5,6)

span 属性表示正则表达式匹配到的结果字符串的开始和结束下标。

 

三、 group 方法

正则表达式中,group()用来提出分组截获的字符串,()用来分组。

print(m.group())

输出的结果为:mjada

print(m.group(0))

输出的结果为:mjada

print(m.group(1))

输出的结果为:IndexError: no such group

使用 group 方法可以获取匹配的字符串结果# group 可以传参,表示第 n 个分组

(一)、group 方法表示正则表达式的分组:

1. 在正则表达式里使用()表示一个分组

2. 如果没有分组,默认只有一组

3. 分组的下标从开始

group(num=0):匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。

groups():返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

m1=re.search(r' (9.*)(0.*)(5.*7)',

'da9fi0riel5kfsda7ifsdaiferit' )

这个正则表达式有 4 个组。

分组 0 : (9.*)(0.*)(5.*7)

第1组:(9.*)

print(m1.group(0))

输出结果为:9fi0riel5kfsda7

第 0 组就是把整个正则表达式当做一个整体。

print(m1.group())#默认拿第0组。

print(m1.group(1))#9fi

print(m1.group(2))#0riel

print(m1.group(3))#5kfsda7

(二)、groupdict

1、作用:是获取到分组组成的字典

2、例子:

#print(m1. groupdict())

输出结果为:{}

#(?P<name>表达式)可以给分组起一个名字

m2=re.search(r'(9.*)(?P<xxx>0.*)(5.*7)','da9fiorie15kfsda7ifsdaiferit')

print(m2.groupdict())

输出的结果为:{ ' xxx ' : '0riel'}, ' xxx '为名字,'0riel'为匹配结果

#可以通过分组名或者分组的下标获取到分组里匹配到的字符串

Print(m2.group(‘xxx’))

m2.group(2)

正则表达式中的三组括号把匹配结果分成三组:

group() 同 group(0)就是匹配正则表达式整体结果,group(1)  列出第一个括号匹配部分,group(2)  列出第二个括号匹配部分,group(3)  列出第三个括号匹配部分。

没有匹配成功的,re.search()返回 None

当然正则表达式中没有括号,group(1) 肯定不对了

 

相关文章
解决cvc-complex-type.2.4.c: 通配符的匹配很全面, 但无法找到元素 ‘context:property-placeholder‘ 的声明的问题~
解决cvc-complex-type.2.4.c: 通配符的匹配很全面, 但无法找到元素 ‘context:property-placeholder‘ 的声明的问题~
256 0
|
9月前
|
XML 应用服务中间件 Apache
通配符的匹配很全面, 但无法找到元素 ‘context:component-scan‘ 的声明。
通配符的匹配很全面, 但无法找到元素 ‘context:component-scan‘ 的声明。
|
XML 数据格式
解决问题:通配符的匹配很全面, 但无法找到元素 ‘context:component-scan‘ 的声明~
解决问题:通配符的匹配很全面, 但无法找到元素 ‘context:component-scan‘ 的声明~
208 1
33.从入门到精通:Python3 正则表达式 re.match函数 re.search方法 re.match与re.search的区别
33.从入门到精通:Python3 正则表达式 re.match函数 re.search方法 re.match与re.search的区别
|
索引 Python
【从零学习python 】63.正则表达式中的re.Match类及其属性和方法介绍
【从零学习python 】63.正则表达式中的re.Match类及其属性和方法介绍
160 0
|
Android开发
Android 中Uri.parse()的作用
Android 中Uri.parse()的作用
260 0
ES中的Multi_match深入解读:best_fields、most_fields、cross_fields用法一览
ES中的Multi_match深入解读:best_fields、most_fields、cross_fields用法一览
ES中的Multi_match深入解读:best_fields、most_fields、cross_fields用法一览
|
XML Dubbo Java
通配符的匹配很全面, 但无法找到元素 'context:component-scan' 的声明
通配符的匹配很全面, 但无法找到元素 'context:component-scan' 的声明
|
开发者 索引
Match_all|学习笔记
快速学习 Match_all。
117 0
|
开发者 索引
match_all | 学习笔记
快速学习 match_all

热门文章

最新文章