Python基础语法Day13

1 通过python中re模块去学习并使用 正则表达式的基本知识点

在这里插入图片描述

#group(num) 可以获取匹配的数据  如果有多个匹配结果的话 那么会以元组的形式 存放到group对象中,
#此时我们可以通过下标去获取
import  re
data='Python is the best language in the world'
result=re.match('Python',data)#精确匹配,只能匹配包含第一个字母的
print(type(result))#返回<class 're.Match'>
print(result.group())#利用group获取匹配的值
#通过python中re模块去学习并使用 正则表达式的常用匹配规则
import re
strData='Python is the best language in the world'
#match 只能匹配以xxx开头的子符串,第一个参数是正则,第二个参数是需要匹配的字符串
res=re.match('Python',strData,re.I)#re.I忽略大小写
res = re.match('(.*) is (.*?) .*',strData,re.I|re.M)
if res:
    print('匹配成功...')
    print(res)
    print(res.groups())#以元祖形式返回所有的值
    print(res.group(1))
    print(res.group(2))
else:
    print(res.group()) #如果匹配失败 是没有group函数的 因为是一个空对象None
    # print(res)
    print('匹配失败...')

2 常用的匹配规则

在这里插入图片描述

  # . 点的使用  匹配规则是除了 换行符之外的字符
import re
# data='a1aaa'
# names='李达','李明','小王','小李'
# pattern='李.' #匹配规则
# parrtern='...'#匹配规则
# for name in names:
#     res=re.match(pattern,name)
#     if res:
#         print(res.group())
# []中括号的使用  匹配规则是:匹配中括号中的任意一个字符
str1='eHello'
# str1='eee'
# res=re.match('[he]',str1)
# res=re.match('[He]',str1) #只能匹配单一字符
# print(res.group())
# pattern='[abc]' #使用中括号括起来的内容, 代表一个集合,代表匹配集合内的任意一个字符
# pattern='[a-z]'  #可以简写一个范围abcdefg
# [abc]代表可以匹配a或者b或者c
# datas='a','b','c','e','wyw'
# for data in datas:
#     result=re.match(pattern,data)
#     if result:
#         print('匹配成功 %s'%result.group())
#
# \d 匹配一个数字  0-9
# data='12345abcdef'
# print(re.match('\d\d\d',data).group())
# \D 匹配一个非数字
# data='W12345abcdef'
# print(re.match('\D',data).group())
# \s 匹配一个空白字符 或者tab键
# data='  hello'
# print(re.match('\s\s',data).group())
# \S 匹配非空白字符
# data='Pthon  hello'
# print(re.match('\S\S\S\S\S',data).group())
# \w 匹配单词字符,即a-z、A-Z、0-9、_  使用较频繁
# data='_2Yssdf'
# print(re.match('\w\w',data).group())
# \W 匹配非[a-z、A-Z]单词字符  使用较频繁
# data='@$#  _2Yssdf'
# print(re.match('\W\W',data).group())

3 正则匹配数量

在这里插入图片描述

#正则===匹配
# *  匹配前一个字符出现0次或者无限次,即可有可无
import re
# res=re.match('[A-Z][A-Z]*','My')#匹配0次
# res=re.match('[A-Z][a-z]*','EnjoyLifeEnjoyLearning')#匹配了2次
# res=re.match('[A-Z][a-z]*','Enjoylifeenjoylearning')
# print(res.group())
# +  匹配前一个字符出现1次或者无限次,即至少有1次
# res=re.match('[a-zA-Z]+','SUNSHINElife')
# print(res.group())
# 匹配符合规范【规则是:不能以数字开头,只能包含字母、数字、下划线】的python变量命名
# result=re.match('[a-zA-Z_]+[\w]*','name')
# result=re.match('[a-zA-Z_]+[\w]*','_name')
# result=re.match('[a-zA-Z_]+[\w]*','na99m_e')
# print(result.group())
# ? 告诉引擎匹配前导字符 0 次或者一次,事实上表示前导字符是可以选择的
# result=re.match('[a-zA-Z]+[0-9]?','nameCloud99m_e')#可以匹配前面字符至少1次或者多次
# print(result.group())
# {min,max}  告诉引擎匹配前导字符min次到max次 ,min和max必须都是非负整数
#  {count} 数字表示精确匹配的字符长度
# result=re.match('\d{4,}','123')
# result=re.match('\d{4,}','1234567890')
#  {min,} 加逗号表示max被省略的话 表示max没有限制了
# result=re.match('\d{4,}','12342354235454623890')
# result=re.match('\d{4,8}','1234545363284972398')
# if result:
#     print('匹配成功 {}'.format(result.group()))
#     pass
# 匹配邮箱demo   格式xxxxxx@163.com
# regexMail=re.match('[a-zA-Z0-9]{8,11}@163.com','wana123uuu@163.com')
# if regexMail:
#     print('匹配成功 {}'.format(regexMail.group()))
#     pass

4 转义开头和结尾

在这里插入图片描述

# mypath = 'G:\\py资料\\1-上课资料\\4-正则表达式课件\\html'
# print(mypath) # 路劲输出异常

# print(re.match('c:\\\\a.txt','c:\\a.txt').group())
# print(re.match(r'c:\\a.txt','c:\\a.txt').group()) #在正则前面加r表示原生的字符串,python字符串就不转义

# ^ 匹配字符串的开头, . 表示一个或多个, *结尾
# result=re.match('^P.*','Python is langage')
# result=re.match('^P\w{5,}','Python is langage') # \w 提取字符
# if result:
#     print(result.group())
# $ 匹配邮箱的结尾
# result=re.match('[\w]{5,15}@[\w]{2,5}.com$','myfunckmail@mail.comTest')
# if result:
#     print(result.group())
#     pass
#$匹配邮箱的结尾
# result=re.match('[\w]{5,15}@[\w]{2,3}.com$','accountlizzzz@qq.com')#@
# result=re.match('[\w]{5,15}@[\w]{2,3}.com$','accountlizzzz@163.com')#@
# if result:
#     print(result.group())

5 分组匹配

#分组匹配
# |  竖线 匹配左右任意一个表达式  实际上是一个  或 的关系
import re
# string='wwwhhppptt6666'
# rs=re.match('(whhpp|wwwhhppptt666)',string)
# rs=re.match('(wwwhhppptt666|hhpp)',string)
# print(rs.group())

#(ab) 分组匹配  将括号中字符作为一个分组
# 匹配电话号码  xxxx-123456789
# res=re.match('([0-9]*)-(\d*)','0381-574892352')
# res=re.match('([^-]*)-(\d*)','0381-574892352')  # ^ 有两种含义 1:以xxxx开头  2:否定 取反
# print(res.group())
# print(res.group(0))
# print(res.group(1))
# print(res.group(2))
#\num的使用 引用分组num匹配到的字符串
# htmlTag='<html><h1>测试数据</h1></html>'
# res=re.match(r'<(.+)><(.+)>(.+)</\2></\1>',htmlTag)#r原生,.任意, +多个; \2 表示前面第二组的匹配,\1前面第一组的匹配
# print(res.group())
# print(res.group(1))
# print(res.group(2))
# print(res.group(3))
# 分组 别名的使用 (?P<名字>) P必须大写
# 如何使用别名 (?P=引用的名字)
data='<div><h1>www.baidu.com</h1></div>'
# res=re.match(r'<(\w*)><(\w*)>(.*)<(/\w*)></\w*>',data)#\w任意字符,*多个
res=re.match(r'<(?P<name1>\w*)><(?P<name2>\w*)>.*</(?P=name2)></(?P=name1)>',data)
print(res.group(0))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值