Python正则表达式之字符串匹配分组

  • |:匹配左右任意一个表达式(或)
  • (ab) :将括号中字符作为一个分组(与)
  • \num :引用分组num匹配到的字符串
  • (?P<name>) :分组起别名
  • (?P=name) :引用别名为name分组匹配到的字符串

示例1:

需求:匹配出0-100之间的数字

import re
ret = re.match("[1-9]?\d","8")
print(ret.group()) #8

ret = re.match("[1-9]?\d","78")
print(ret.group()) #78

#不正确的情况
ret = re.match("[1-9]?\d","08")
print(ret.group())  #0

#修正之后
ret = re.match("[1-9]?\d$","08")
if ret:
    print(ret.group())
else:
    print("不在0-100之间")

#添加|
ret = re.match("[1-9]?\d$|100","8")
print(ret.group())  #8

ret = re.match("[1-9]?\d$|100","78")
print(ret.group())  #78

ret = re.match("[1-9]?\d$|100","08")
#print(ret.group())  #不在0到100之间,故错

ret = re.match("[1-9]?\d$|100","100")
print(ret.group()) #100

#运行结果
8
78
0
不在0-100之间
8
78
100

示例2:()

需求:匹配出163、126、qq邮箱

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import re
ret = re.match("\w{4,20}@16..com","test@163.com")
print(ret.group())  #test@163.com

ret = re.match("\w{4,20}@(163|126|qq)\.com","test@126.com")
print(ret.group())  #test@126.com

ret = re.match("\w{4,20}@(163|126|qq)\.com","test@qq.com")
print(ret.group())  #test@qq.com

ret = re.match("\w{4,20}@(163|126|qq)\.com","test@sina.com")
if ret:
    print(ret.group())
else:
    print("不是163、126、qq邮箱")   #不是163、126、qq邮箱



#运行结果
test@163.com
test@126.com
test@qq.com
不是163126、qq邮箱

*示例3:*

需求:匹配出hh

import re

#能够完成对正确的字符串的匹配
ret = re.match("[<a-zA-Z>]*\w</[a-zA-Z]*>","<html>hh</html>")
print(ret.group())    #<html>hh</html>

#如果遇到非正常的html格式字符串,匹配出错
ret = re.match("[<a-zA-Z>]*\w</[a-zA-Z]*>","<html>hh</htmlbalabal>")
print(ret.group())  #<html>hh</htmlbalabal>

#正确的理解思路 :如果在第一对<>中是什么,按理来说后面的那对<>中就应该是什么

#通过引用分组中匹配到的数据即可,但是要注意是元字符串,即类似r""这种格式
ret = re.match(r"<([a-zA-Z]*)>\w*</\1>", "<html>hh</html>")
print(ret.group())  #<html>hh</html>


#因为2对<>中的数据不一致,所以匹配不出来
test_label = "<html>hh</htmlbalabala>"
ret= re.match(r"<([a-zA-Z]*)>\w*</\1>",test_label)
if ret:
    print(ret.group())
else:
    print("%s 这是一个不对的标签" % test_label)    #<html>hh</htmlbalabala> 这是一个不对的标签


#运行结果
<html>hh</html>
<html>hh</htmlbalabal>
<html>hh</html>
<html>hh</htmlbalabala> 这是一个不对的标签

模式修正符

  • re.S 让.也可以匹配多行
  • re.I 让匹配时忽略大小写
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值