正则表达式复习

1.为什么使用正则表达式?

为了下列场景中的需求,可以使用正则表达式非常简单的完成,这就是使用正则表达式的目的

  1. 在一个文件中,查找出itcast开头的语句
  2. 在一个文件中,找到含有itcast的语句
  3. 在一个文件中,找到邮箱为163或者126的所有邮件地址

2.re模块

通常正则表达式对字符串匹配的时候,可以使用re模块

import re

# 使用match方法进行匹配操作
result = re.match(正则表达式, 要匹配的字符串)

# 如果上一步匹配到数据, 可以使用group方法提取数据
result.group()

例如:
result = re.match('itcast', 'itcast.cn')
ret = result.group()
print(ret)   # itcast

3.匹配字符

字符功能
.(点)匹配任意1个字符(除了\n)
[ ]匹配[ ]中列举的字符
\d匹配数字,即0-9
\D匹配非数字,即不是数字
\s匹配空空,即空格、tab键
\S匹配非空白
\w匹配单词字符,即a-z、A-Z、0-9、_
\W匹配非单词字符

4.匹配个数

字符功能
*匹配前一个字符出现0次或者无限次,即可有可无
+匹配前一个字符出现1次或者无限次,即至少有一次
匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m}匹配前一个字符出现m次
{m, n}匹配前一个字符出现从m到n次

5.匹配开头结尾

字符功能
^匹配字符串开头
$匹配字符串结尾
  1. 匹配163.com的邮箱地址
    import re
    
    email_list = ["xiaoWang@163.com", "xiaoWang@163.comheihei", ".com.xiaowang@qq.com"]
    for email in email_list:
    	ret = re.match("[\w]{4,20}@163\.com$", email)
    	if ret:
        	print("%s 是符合规定的邮件地址,匹配后的结果是:%s" % (email, ret.group()))
        else:
            print("%s 不符合要求" % email)
    

6.元字符串

**正则表达式使用反斜杠" \ "来代表特殊形式或用作转义字符

7.匹配分组

字符功能
|匹配左右任意一个表达式
(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
    
  2. 匹配出163、126、qq邮箱
    import re
    
    email_list = ["test@163.com", "test@126.com", "test@qq.com", "test@gmail.com"]
    for email in email_list:
    	ret = re.match("[\w]{4,20}@(163|126|qq)\.com$", email)
    	if ret:
        	print("%s 是符合规定的邮件地址,匹配后的结果是:%s" % (email, ret.group()))
        else:
            print("%s 不符合要求" % email)
    
  3. 不是以4、7结尾的手机号码(11位)
    import re
    
    tels = ["13100001234", "18912344321", "10086", "18800007777"]
    
    for tel in tels:
        ret = re.match("1\d{9}[0-35-68-9]", tel)
        if ret:
            print(ret.group())
        else:
            print("%s 不是想要的手机号" % tel)
    
  4. 提取区号和电话号码
    >>> ret = re.match("([^-]*)-(\d+)","010-12345678")
    >>> ret.group()
    '010-12345678'
    >>> ret.group(1)
    '010'
    >>> ret.group(2)
    '12345678'
    

8.贪婪和非贪婪

贪婪:总是匹配尽可能多的字符
非贪婪:相反,总是尝试匹配尽可能少的字符

  1. 在 “*”, “?”, “+”, “{m,n}” 后面加上?,使贪婪变成非贪婪
    >>> re.match(r"aa(\d+)","aa2343ddd").group(1)
    '2343'
    >>> re.match(r"aa(\d+?)","aa2343ddd").group(1)
    '2'
    >>> re.match(r"aa(\d+)ddd","aa2343ddd").group(1) 
    '2343'
    >>> re.match(r"aa(\d+?)ddd","aa2343ddd").group(1)
    '2343'
    >>> 
    

9.r的作用

python中字符串签名加上 r 表示 原生字符串

  1. r 的好处
    有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值