[2022.7.19] 正则表达式相关内容(贪婪匹配 ,非贪婪匹配)

学习内容概要

  • 正则表达式
  • 正则表达式之字符组
  • 正则表达式之特殊符号
  • 正则表达式之量词
  • 正则表达式练习题
  • 贪婪匹配与非贪婪匹配
  • 取消转义
  • 正则表达式实战

正则表达式

  • 摘要:该知识点 不属于任何一门编程语言 是独立的学科

    正则表达式是一种被用于从文本中检索符合某些特定模式的文本

    主要是用于数据的查找于筛选

1.正则表达引导作业
	需求:编写代码校验 用户输入的手机号是否合法
     首先用python代码去编写功能:
        
        
phone_num = input('快输入号码>>>:').strip()
if phone_num.isdigit():
    if len(phone_num) == 11:
        if phone_num.startswith('13')or phone_num.startswith('15')or phone_num.startswith('17') or phone_num.startswith('18')or phone_num.startswith('19'):
            print('手机号输入合法')
            print(int(phone_num))
        else:
            print('手机号输入不合法')
    else:
        print('手机号必须是11位')

else:
    print('手机号必须是纯数字')

    
    
# 用正则表达式去写入:

import re

phone_num = input('快点垃圾号码输入下吧>>>:').strip()
if re.match('^[13|15|17|18|19][0_9]{9}',phone_num):
    print(phone_num)
else:
    print('输入手机号不能用')
        
总结:
	正则表达式本质上就是使用一些符号的组合产生一些特殊的含义
    然后去字符串中筛选出符合条件的数据
    
    	

正则表达式之字符组

字符组 作用
[0-9] 可以匹配0到9之间任意一个数据值(包括0和9)
[A-Z] 可以匹配A到Z之间任意一个数据值(包括A和Z)
[a-z] 可以匹配a到z之间任意一个数据值(包括a和z)
[0-9a-zA-Z] 可以匹配0-9和a-z和A-Z之间任意一个数据值
注意: 字符组在没有量词修饰的情况下一次只针对一个数据值

正则表达式之特殊符号

特殊符号 作用
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线
\W 匹配非字母或数字或下划线
\d 匹配数字
^ 匹配字符串的开头
$ 匹配字符串的结尾
^ 数据 & ^ 与$组合来用 能够明确的限制查找的具体数据 这个数据既要在开头也要在结尾 只能是单数据 ^1$
a|b 匹配字符a或字符b的意思 管道符:| 在很多的场景下表达的意思都是 或
( ) 给正则表达式分组 不影响正常的匹配
[ ] 匹配字符组中的字符
[ ^] 匹配除了字符组中字符的所有字符
注意: 特殊符号在没有量词修饰的情况下一次只针对一个数据值

正则表达式之量词

  • 量词不能单独使用 必须跟在表达式的后面 并且只能影响紧挨着的左边那一个
量词 作用
* 重复零次或者更多次(默认就是尽可能多次)
+ 重复一次或者更多次(默认就是尽可能多次)
重复一次或者更多次(默认就是一次)
重复n次
重复n次到很多次
重复n次到m次
注意: 在正则表达式中所有的量词默认都是贪婪匹配(尽可能多的)

正则表达式练习题

正则 带匹配字符 匹配结果
海. 海燕海娇海东 海燕海娇海东
^海. 海燕海娇海东 海燕
海.$ 海燕海娇海东 海东
李.? 李杰和李莲英和李二棍子 李杰
李莲
李二
李.* 李杰和李莲英和李二棍子 李杰和李莲英和李二棍子
李.+ 李杰和李莲英和李二棍子 李杰和李莲英和李二棍子
李. 李杰和李莲英和李二棍子 李杰和
李莲英
李二棍
李[杰莲英二棍子]* 李杰和李莲英和李二棍子 李杰
李莲英
李二棍子
李[^和]* 李杰和李莲英和李二棍子 李杰
李莲英
李二棍子

贪婪匹配与非贪婪匹配

  • 待匹配的文本:love(888)

  • (贪婪匹配) 正则表达式:<.*>

    上述正则匹配出来的内容是:

    love(888)

  • (非贪婪匹配)正则表达式:<.*?>

    上述正则匹配出来的内容是:

  • 注意:

    所有的量词默认都是贪婪匹配 但是如果在量词的后面紧跟一个问号
    那么就会变成非贪婪匹配

    小技巧:以后我们在使用贪婪匹配或者非贪婪匹配的时候一般都是用.或者.?
    并且结束的标志有上述符号左右两边添加的表达式决定

取消转义

  • 正则表达式中取消斜杠与字母的特殊含义 就是在斜杠前面加斜杠

    正则表达式 待匹配字符
    \n \n
    \\\n \n
  • 在python中有更加简便的写法 添加 r 需要文件路径转义

    r'\n'
    r'\\n'
    

正则表达式实战

# 多种表达式:

编写校验用户手机号的正则
	0?(13|14|15|17|18|19)[0-9]{9}
编写校验用户身份证的正则
	\d{17}[\d|x]|\d{15}
编写校验用户邮箱的正则
	\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}
编写校验用户qq号的正则
	[1-9]([0-9]{5,11})
编写日期(MM/DD/YYYY)的正则:
^(0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.](19|20)?[0-9]{2}$
编写网址的正则:
^(((http|https|ftp):\/\/)?([[a-zA-Z0-9]\-\.])+(\.)([[a-zA-Z0-9]]){2,4}([[a-zA-Z0-9]\/+=%&_\.~?\-]*))*$
  • 总结:

    ​ 常见的正则百度查找即可 我们需要做到的时候能够看到别人写的
    能够完成基础的修改即可

posted @   W日常  阅读(90)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示