python~正则表达式总结三

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

目录

pattern对象的属性

flags属性:

groups属性:

groupindex属性:

Match对象的属性

string 属性:

re属性:

pos属性:

endpos属性:

lastindex属性:

lastgroup属性:

group([group1, ...]):

groups([default=None]):

start([group=0]):

end([group=0]):

span([group]):

groupdict([default=None]):


pattern对象的属性

flags属性:

该属性表示获取编译时用的匹配模式,数字形式

>>> p=re.compile(r"\d+",re.I)

>>> p.flags

34

>>> p=re.compile(r"\d+",re.M)

>>> p.flags

40

>>> p=re.compile(r"\d+",re.S)

>>> p.flags

48

groups属性

该属性表示获取表达式中分组的数量

>>> pattern=re.compile(r"\d+")

>>> pattern.groups

0

>>> pattern=re.compile(r"(\d+)(\w+)")

>>> pattern.groups

2

groupindex属性

以表达式中有别名的组的别名为键、以该组对应的编号为值的字典,没有别名的组不包含在 内

>>> pattern=re.compile(r"(\d+)(\w+)")

>>> pattern.groupindex

mappingproxy({})

>>> p=re.compile(r"(?P<group1>\d+)(?P<group2>\w+)")

>>> p.groupindex

mappingproxy({'group1': 1, 'group2': 2})

Match对象的属性

Match对象是一次匹配后的结果,它包含了很多关于此次匹配的信息,可以使用Match提供 的可读属性或方法来获取这些信息。

string 属性:

获取匹配时使用的字符串对象

>>> import re

>>> re.match(r"\w+","ab21").string

'ab21'

re属性:

匹配时使用的pattern对象,也就是匹配到内容的正则表达式对象

>>> import re

>>> re.match(r"\D+","ab21").re

re.compile('\\D+')

pos属性:

该属性表示文本中正则表达式开始搜索的索引

>>> import re

>>> re.match(r"\D+","ab21").pos

0

endpos属性:

该属性表示文本中正则表达式结束搜索的索引

>>> import re

>>> re.match(r"\D+","ab21").endpos

4

lastindex属性:

该属性表示最后一个被捕获的分组在文本中的索引。如果没有被捕获的分组,将为None

>>> import re

>>> m=re.match(r"(\w+)!(\w+)(?P<sign>.*)","Hi!gloryroad!")

>>> m.lastindex

3

>>> m.group(3)

'!'

lastgroup属性:

该属性表示最后一个被捕获的分组别名。如果这个分 组没有别名或者没有被捕获的分组,将为None

>>> import re

>>> m=re.match(r"(\w+)!(\w+)(?P<sign>.*)","Hi!gloryroad!")

>>> m.lastgroup

'sign'


>>> t=re.match(r"\d+","123")

>>> t.lastgroup

>>> print (t.lastgroup)

None

>>> print (t.lastindex)

None

group([group1, ...]):

获得一个或多个分组截获的字符串;指定多个参数时将以元组形式返回。group可以使用编号也可以使用别名;编号0代表匹配的整个子串,默认返回group(0);没有截获字符串的组返回None;截获了多次的则返回最后一次截获的子串

import re

p=re.compile("[a-z]+\s(\d)(\w)")
result=p.search("aa 1w31")
print (result)
if result:
    print ("整个匹配结果为%s"% result.group())

print ("整个匹配结果为%s" % result.group(0))
print ("第一个分组内容为%s" % result.group(1))
print ("第二个分组内容为%s" % result.group(2))

group函数使用编号和分组别名

import re 
matchResult=re.search(r'(a(b)c)d','abcdefg') 
print (matchResult.group())
print (matchResult.group(1))
print (matchResult.group(2))


>>> result=re.search(r"(?P<word>\w+)(?P<num>\d)","hello4")
>>> result.group("word")
'hello'
>>> result.group("num")
'4'

group函数传多个参数时,以元组的形式返回

import re 
p = re.compile('(a(b)c)d') 
m = p.match('abcd') 
resTup = m.group(1,2) 
print (resTup)


>>> t=re.match(r"\d+","123")
>>> m.group(1,2)
('Hi', 'gloryroad')

groups([default=None]):

以元组形式返回全部分组截获的字符串,相当于调用group(1,2,…last)。没有截获字符串的组以默认值 None代替

import re 
p = re.compile('(a(b)c)d') 
m = p.match('abcd') 
resTup = m.groups()
print (resTup)

start([group=0]):

返回指定的组截获的子串在string中的起始索引(子串第一个字符的索引)。默认为第0组

>>> import re 
>>> m=re.match(r"(\w+)(\d)(\w+)","abc3def")
>>> m.groups()
('abc', '3', 'def')print (resTup)
>>> m.start(1)
0
>>> m.start(2)
3

end([group=0]):

返回指定的组截获的子串在string中的结束索引(子串最后一个字符的索引)。group默认值 为0

>>> m = re.search(r'(\w+)! (\w+) (\w+)','HMan! gloryroad train')
>>> m.group()
'HMan! gloryroad train'
>>> m.group(1)
'HMan'
>>> m.group(1)
'HMan'
>>> m.group(2)
'gloryroad'
>>> m.group(3)
'train'
>>> m.end()  #获取第三个分组被匹配内容的最后一个字母在被匹配字符串的索引位置
21
>>> len('HMan! gloryroad train')
21
>>> m.end(2)  #获取第二个分组被匹配内容的最后一个字母在被匹配字符串的索引位置 
15

span([group]):

该方法表示以元组的形式返回 (start(group), end(group)),即某个分组的匹配文字内容在被匹配字符串的开始索引位置和结束索引位置

import re  
m = re.search(r'(\w+)! (\w+) (\w+)','HMan! gloryroad train') 
print (m.group(1),m.group(2),m.group(3))
print (m.span())
print (m.span(1))
print (m.span(2))
print (m.span(3))

groupdict([default=None]):

该函数的作用是,将所有匹配到并且指定了别名的分组,以别名为key,匹配到的字串为value,存于字典中,然后返回这个字典。如果表达式中未设置别名分组,就会返回一个空字典

import re   
line = "This is the last one" 
res = re.match( r'(?P<group1>.*) is (?P<group2>.*?) .*', line, re.M|re.I) 
groupDict = res.groupdict() 
if groupDict:   
    print (groupDict)
else :   
print ("无别名分组") 


>>> m=re.search(r"\d+","123")
>>> m.groupdict()
{}

猜你喜欢

转载自blog.csdn.net/weixin_37579123/article/details/84613842