设为首页 收藏本站
查看: 650|回复: 0

[经验分享] 在Python中使用正则表达式进行查找

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-3-7 09:42:57 | 显示全部楼层 |阅读模式
re模块提供了3个方法对输入的字符串进行确切的查询,match和search最多只会返回一个匹配条件的子串,可以理解为非贪婪模式,而findall会返回N个匹配条件的子串,可以理解为贪婪模式
re.match()
re.search()
re.findall()

#match()方法的工作方式是只有当被搜索字符串的开头匹配模式的时候它才能查找到匹配对象,match返回的是对象,对象里面包含了很多信息
1
2
3
4
match=re.match(r'dog','dog cat dog') #只要匹配到满足条件的就不匹配了
print match.group(0)  #dog
print match.start()    #0
print match.end()     #3



1
2
match=re.match(r'cat','dog cat dog')
print type(match) #<type 'NoneType'>  #因为cat没有在字符串的开头,所以没有匹配到





#search()方法和match()类似,不过search()方法不会限制我们只从字符串的开头查找匹配,它匹配子串,直到匹配到为止或者字符串结束为止
1
2
3
4
match=re.search(r'cat','dog cat dog')
print match.group(0)   #cat,如果不分组,默认就是第0组
print match.start()    #4
print match.end()     #7




#findall返回的是列表
1
2
match=re.findall(r'dog', 'dog cat dog') #匹配是整个字符串,每个子串都要匹配,匹配到的字符串剔除,后面的字符串要继续匹配正则条件,直到字符串的结尾,有多少匹配多少
print match #['dog', 'dog']





#使用 mathch.group 分组使用(),分组和不分组匹配的"大子串"都是一样,但是分组之后,可以对这些子组做单独处理。
1
2
3
contactInfo = 'Doe, John: 555-1212'
match=re.search(r'\w+, \w+: \S+', contactInfo)
print match.group(0)    #Doe, John: 555-1212



1
2
3
4
5
match = re.search(r'(\w+), (\w+): (\S+)', contactInfo)
print match.group(0)   #Doe, John: 555-1212,第0组表示匹配的"大子串",满足全部条件
print match.group(1)    #Doe
print match.group(2)     #John
print match.group(3)     #555-1212



#当一个正则表达式有很多分组的时候,通过组的出现次序来定位就会变的不现实。Python还允许你通过下面的语句来指定一个组名:
1
2
3
4
match = re.search(r'(?P<last>\w+), (?P<first>\w+): (?P<phone>\S+)', contactInfo)
print match.group('last')  #Doe
print match.group('first') #John
print match.group('phone') #555-1212




#尽管findall()方法不返回分组对象,它也可以使用分组。类似的,findall()方法将返回一个元组的集合,其中每个元组中的第N个元素对应了正则表达式中的第N个分组。
1
2
match=re.findall(r'\w+, \w+: \S+', contactInfo)
print match    #['Doe, John: 555-1212']





1
2
match=re.findall(r'(\w+), (\w+): (\S+)', contactInfo)
print match   #[('Doe', 'John', '555-1212')]



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-187413-1-1.html 上篇帖子: python小demo之判断闰年 下篇帖子: centos6.5 下的vim的python自动补全 表达式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表