python之正则表达式

一.正则表达式语法

二.例子

import re
#匹配a到c的字符
mc=re.match(r'[abc]','b')  #mc.group()为b
print(mc.group())
mc=re.match(r'[abc]','abcd')  #mc.group()为a
print(mc.group())
mc=re.match(r'[abc]','aeeee')  #mc.group()为a
print(mc.group())

#匹配a到c的字符
mc=re.match(r'{[abc]}','{a}')  #mc.group()为{a}   {[abc]}的匹配字符串为"{c}"
print(mc.group())
#mc=re.match(r'{[abc]}','{ab}')  #mc.group()为NoneType   {[abc]}的匹配字符串为"{c}",{ab}是无法匹配的
#print(mc.group())
#mc=re.match(r'[abc]','d')  #mc为nonetype
#print(mc.group())

#匹配a到z的字符
mc=re.match(r'[a-z]','aeeee')  #mc.group()为a
print(mc.group())

#匹配A到Z的字符
mc=re.match(r'[A-Z]','Beeee')  #mc.group()为B
print(mc.group())

#匹配a到z或者A-Z的字符
mc=re.match(r'[a-zA-Z]','beeee')  #mc.group()为b
print(mc.group())

#匹配a到z或者A-Z或者0-9的字符
mc=re.match(r'[a-zA-Z0-9]','0eeee')  #mc.group()为0
print(mc.group())

#\w/\W----匹配单词字符[a-zA-Z0-9]/非单词字符
mc=re.match(r'[\w]','beeee')   #mc.group()为b
print("[\w]:  "+mc.group())

#\w/\W----匹配单词字符[a-zA-Z0-9]/非单词字符
#\w----匹配单词字符[a-zA-Z0-9]
mc=re.match(r'{[\w]}','{b}')   #mc.group()为{b}
print("{[\w]}:  "+mc.group())
#mc=re.match(r'{[\w]}','{ }')   #mc.group()为NoneType  因为空格为非单词字符
#print("空格:  "+mc.group())

#\W----匹配非单词字符
mc=re.match(r'{[\W]}','{ }')   #mc.group()为NoneType  因为空格为非单词字符
print("[\W]:  "+mc.group())

#/d\/D  匹配数字/非数字
mc=re.match(r'{[\d]}','{1}')   #mc.group()为NoneType  因为空格为非单词字符
print("[\d]:  "+mc.group())

#/s\/S  匹配空白/非空白字符
mc=re.match(r'{[\S]}','{1}')   #mc.group()为NoneType  因为空格为非单词字符
print("[\S]:  "+mc.group())

#若想要匹配中国号[]的字符串
#错误写法
#mc=re.match(r'[[\d]]','[1]')   #mc.group()为NoneType  因为加了中国号,可能会判断错误,所以我们需要转义
#print("[\d]:  "+mc.group())
#正确写法
mc=re.match(r'\[[\d]\]','[1]')   #mc.group()为NoneType
print("[\d]:  "+mc.group())

#加上字符*表示匹配首字符0次或者无限次
ma=re.match(r'[A-Z][a-z]','Aa')
print(ma.group())
#应用:r'[A-Z][a-z]*'即表示匹配一个大写字母+0个或者无限个小写字母+字符串后缀
ma=re.match(r'[A-Z][a-z]*','A')     #mc.group()为A
print(ma.group())
ma=re.match(r'[A-Z][a-z]*','AaaaB')    #mc.group()为Aaaa
print(ma.group())

#前缀放进[]里面与放在外面的区别
ma=re.match(r'[1a-zA-Z]+[_\W]*','111_htll')  #这个的值为111_
print(ma.group())
ma=re.match(r'1[a-zA-Z]+[_\W]*','111_htll')  #这个无效
print(ma.group())

1.{m}/{m,n} 匹配前一个字符m次或者m到n次

2.*?/+?/?? 匹配模式变为非贪婪(尽可能少匹配字符)

#匹配数字0-99
ma=re.match(r'[1-9]?[0-9]','9')   #前一个字符范围(1-9),该字符可出现0或1次,后一个字符范围(0-9)
print(ma.group())

#{m}/{m,n}  匹配前一个字符m次或者m到n次
ma=re.match(r'[a-zA-Z0-9]{6}','abc12333')
print(ma.group())
ma=re.match(r'[a-zA-Z0-9]{6,10}@163.com','abc123@163.com')
print(ma.group())

#*?/+?/??  匹配模式变为非贪婪(尽可能少匹配字符)
ma=re.match(r'[0-9][a-z]*','1abc')  #*为贪婪模式
print(ma.group())   #结果为1abc

ma=re.match(r'[0-9][a-z]*?','1aaa')  #*为贪婪模式  *?前一个字符尽量匹配0次
print(ma.group())   #结果为1

ma=re.match(r'[0-9][a-z]+?','1aaa')  #+?为贪婪模式   +?前一个字符尽量匹配1次
print(ma.group())   #结果为1a

ma=re.match(r'[0-9][a-z]??','1aaa')  #??为贪婪模式   ??前一个字符尽量匹配0次
print(ma.group())   #结果为1
import re
#边界匹配
#字符^   匹配字符串开头
ma=re.match(r'[\w]{5}@163.com','imooc@163.comabc')
print(ma.group())  #答案为imooc@163.com

ma=re.match(r'^[\w]{4,10}@163.com','imooc@163.com44')  #进行全匹配
print(ma.group())  #答案为imooc@163.com
#字符$   匹配字符串结尾
ma=re.match(r'^[\w]{4,10}@163.com$','imooc@163.com')  #进行全匹配  (固定)指定字符串
print(ma.group())  #答案为imooc@163.com

#字符\A/\Z   指定的字符串必须出现在开头/结尾
ma=re.match(r'\Aimooc[\w]*','imoocpython')
print(ma.group())  #答案为imooc@163.com
import re
#正则表达式的分组匹配

#l  匹配左右任意一个表达式
ma=re.match(r'abc|d','abc')
print(ma.group())
ma=re.match(r'abc|d','d')
print(ma.group())
ma=re.match(r'abc|d','d')
print(ma.group())
#0-99
ma=re.match(r'[1-9]?\d$','99')  #表示字符[1-9]可以出现0或1次,\d匹配数字 ,$以前面字符串结尾
print(ma.group())  #结果为99
ma=re.match(r'[1-9]?\d$|100','100')  #表示字符[1-9]可以出现0或1次,\d匹配数字 ,$以前面字符串结尾
print(ma.group())  #结果为100

#(ab)  括号中表达式作为一个分组
ma=re.match(r'[\w]{4,6}@(163|126).com','imooc@126.com')  #匹配一个163或126邮箱
print(ma.group())

#\<number>   引用编号为num的分组匹配到的字符串   ---判断xml的有效性
ma=re.match(r'<[\w]+>','<book>')  #匹配一个<这里存在一个或多个字符>
print(ma.group())   #结果为<book>
ma=re.match(r'<([\w]+>)\1','<book>book>')  #匹配一个<这里存在一个或多个字符>
print(ma.group())   #结果为<book>book>
ma=re.match(r'<([\w]+>)[\w]+</\1','<book>python</book>')  #匹配一个有效的xml
print(ma.group())   #结果为<book>python</book>

#(?P<name>)   分组起一个别名   (?P=mark)引用前面的mark 类似于上面语句的\1
ma=re.match(r'<(?P<mark>[\w]+>)[\w]+</(?P=mark)','<book>python</book>')  #匹配一个有效的xml
print(ma.group())   #结果为<book>python</book>

#(?P=name)    引用别名为name的分组匹配字符串
ma=re.match(r'<(?P<mark>[\w]+>)[\w]+</(?P=mark)','<book>python</book>')  #匹配一个有效的xml
print(ma.group())   #结果为<book>python</book>
split(patter,string,maxsplit = 0,flags = 0) 根据匹配分割字符串,返回分割字符串组成的列表
#split(patter,string,maxsplit = 0,flags = 0) 根据匹配分割字符串,返回分割字符串组成的列表
#pattern,正则表达式    string被分割字符串  maxsplit分割次数
str4 = 'imooc:C C++ Java Python'
print(re.split(r':| ',str4))  #分割以:或者空格
str4 = 'imooc:C C++ Java Python,c#'
print(re.split(r':| |,',str4))  #分割以:或者空格或者,
sub(pattern,repl,string,count = 0,flags = 0)  将字符串中匹配正则表达式的部分替换为其他值
#sub(pattern,repl,string,count = 0,flags = 0)  将字符串中匹配正则表达式的部分替换为其他值
#pattern,正则表达式   repl函数或字符串   string被替换字符串
str3 = 'imooc videonum = 1000'
info = re.sub(r'\d+','1001',str3)
print(info)
#定义一个函数  repl为函数替换
def add1(match):
    val = match.group()
    num = int(val)+1
    return str(num)
str3 = 'imooc videonum = 9999'
print(re.sub(r'\d+',add1,str3))  #结果为imooc videonum = 10000
search(patter,string,flags=0)  在一个字符串中查找匹配  使用正则表达式进行匹配
#search(patter,string,flags=0)  在一个字符串中查找匹配  使用正则表达式进行匹配
#查找字符串中的数字
str1='imooc videonum = 1000'
str1.find('1000')  #返回的是索引
info = re.search(r'\d+',str1)  #在字符串str1中查找数字
print(info.group())
findall(patter,string,flags=0)  找到匹配,返回所有匹配部分的列表
#findall(patter,string,flags=0)  找到匹配,返回所有匹配部分的列表
#获得字符串的所有数字
str2='c++=100,java=90,python=80'
info=re.findall(r'\d+',str2)
print(info)
print(sum([int(x) for x in info]))  #获得字符串info的数字之和

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值