您的位置:首页 > 编程语言 > Python开发

python中的正则表达式(re模块)三

2018-07-29 18:13 471 查看

元字符之分组 ()

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
print(re.findall(r"(abc)+",'abcccccabccc'))
#注释:分组是把括号内的字符串看成一个整体来做正则匹配

以上实例执行结果:
['abc', 'abc']

import re
ret=re.search('(?P<id>\d{2})\.(?P<name>\w{3})','23.com')
print(ret.group())
print(ret.group('id'))
#注释:使用分组的来获取自己想要的组,以上分文两个组(id组和name组),实际正真在匹配的是\d{2}和\w{3}
#注释:(?P<>) 是分组的固定格式,里面的ID为自定义名字

以上实例执行结果:
23.com
23

re模块常用方法 search

#类似于find方法,当第一次匹配到以后就不会继续往后找直接返回结果,如果找不到返回None。

以下实例是使用search方法匹配数字;返回的结果一个match对象

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
ret=re.search('\d+','sdf23sdf35sdfs36')
print(ret)

以上实例执行结果:
<_sre.SRE_Match object; span=(3, 5), match='23'>

获取match对象的值,使用group方法

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
ret=re.search('\d+','sdf23sdf35sdfs36').group()
print(ret)

以上实例执行结果
23

re.match方法与search大致相同,不过match在字符串开始处进行匹配;

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
ret=re.search('\d+','56sdf23sdf35sdfs36').group()
print(ret)

以上实例执行结果
56

split()方法切分字符串

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
ret=re.split('sd','56sdf23sdf35sdfs36')
print(ret)

以上实例执行结果
['56', 'f23', 'f35', 'fs36']

sub()方法与字符串中的replace()方法一样;查找替换

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
ret=re.sub('\d','abc','alvin5yuan6')
print(ret)
#注释:将数字替换为abc
> 执行结果 alvinabcyuanabc

ret=re.subn('\d','abc','alvin5yuan6')
print(ret)
#注释:将数字替换为abc,但是会显示有几处被替换
> 执行结果 ('alvinabcyuanabc', 2)

compile()方法将正则表达式编译成对象;可以多次重复使用,速度效率更高更快。

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
com=re.compile('\d+')        #将正则表达式编译成对象,多次重复使用的时候效率会提高;
res=com.findall('sdjfkl2456sdfds456sdfds456')        #任意方法都可以用findall、search等;
print(res)

finditer()方法将查询后的结果返回一个迭代器

import re
ret=re.finditer('\d','ds3sy4784a')
print(ret)        #<callable_iterator object at 0x10195f940>

print(next(ret).group())
print(next(ret).group())

注意:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import re
res=re.findall('www\.(?:baidu|google)\.com',"www.baidu.com")
print(res)
#注释:不捕获分组,findall方法是分组下只返回分组部分,如果想完整显示使用 ?:

#拓展:不捕获分组
匹配括号中的任何正则表达式,但是匹配的子字符串不能在匹配后提取或在模式中引用。
(a.b)xy\1: 能匹配到a6bxya6b,  不能匹配到a6bxya7b    (a.b)在前面匹配到的内容在后面也要一样 这就叫引用

引用:
\1: 后向引用,引用前面的第一个左括号以及与之对应的右括号中的模式所匹配到的内容
\2

以上实例执行结果:
www.baidu.com

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python