正则法则知识

今日内容

正则法则

正则表达式

  • 简介

    正则法则不属于任何一门编程语言 是一个独立的学科
    主要用于数据的查找与筛选
    
  • 前戏

    手机号的校验,输入是否合法

    纯代码实现

     # 1.获取用户输入的手机号
            phone_num = input('请输入您的手机号>>>:').strip()
            # 2.判断用户输入的手机号是否是纯数字
            if phone_num.isdigit():
                # 3.判断总长度是否是11位
                if len(phone_num) == 11:
                    # 4.判断是否以常见的电话号码开头  13 15 17 18 19
                    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('输入不合法')
    

总结

正则表达式本质上就是使用一些符号的组合产生一些特殊的含义
然后去字符串中筛选出符合条件的数据

正则表达式之字符组

正则表达式线上测试网址:http://tool.chinaz.com/regex/

字符组在没有量词的情况下,一次只会针对一个数据值

[0-9]匹配0到9之间的任意一个数字(包括0和9)全称是:[0123456789]
[A-Z]匹配A到Z之间的任意一个字母(包括A和Z)全称是:[ABCD…WXYZ]
[a-z]匹配A到Z之间的任意一个字母(包括a和z)全称是:[abcd…wxyz]
[0-9a-zA-Z]数字、小写字母、大写字母都可以

在中括号内编写的多个数据值彼此都是或的关系

正则表达式之特殊符号

特殊符号在没有量词修饰的情况一个符号一次只会针对一个数据值

  • 匹配单个字符
符号功能
.匹配除换行符以外的任意字符
\w匹配字母或数字或下划线
\W匹配非字母或非数字或非下划线
\d只匹配数字
\D匹配非数字,即不是数字
\s匹配空白,即空格
\S匹配非空白
  • 特殊符号
符号功能
^匹配字符串的开头
$匹配字符串的末尾
()给正则表达式分组,不影响正则的正常匹配
[]匹配字符组内的字符
[^]匹配除了字符组中的字符以外的字符
  • 举例说明

.的用法

在这里插入图片描述

\w的用法

在这里插入图片描述

\W的用法

在这里插入图片描述

\d的用法

在这里插入图片描述

\D的用法

在这里插入图片描述

\s的用法

在这里插入图片描述

\S的用法

在这里插入图片描述

^的用法

在这里插入图片描述

$的用法

在这里插入图片描述

[]的用法

在这里插入图片描述

()的用法

在这里插入图片描述

[^]的用法

在这里插入图片描述

正则表达式之量词

符号功能
*重复零次或者多次(默认情况下就是尽可能的多)
+重复一次或者多次(默认情况下就是尽可能的多)
重复零次或者一次(默认情况下就是一次)
{n}重复n次
{n,}重复n次或更多次
{n,m}重复n次到m次(默认情况下为m次)

举例说明

*的用法

在这里插入图片描述

+的用法

在这里插入图片描述

?的用法

在这里插入图片描述

{n}的用法

在这里插入图片描述

{n,}的用法

在这里插入图片描述

{n,m}的用法

在这里插入图片描述

正则表达式练习题

.^$

正则待匹配字符匹配结果说明
海.海燕海娇海东海燕海娇海东匹配所有"海."的字符
^海.海燕海娇海东海燕只从开头匹配"海."
海.$海燕海娇海东海东只匹配结尾的"海.$"

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

贪婪匹配与非贪婪匹配

Python⾥数量词默认是贪婪的,总是尝试匹配尽可能多的字符;⾮贪婪则相反,总是尝试匹配尽可能少的字符。

待匹配的文本:<script>alert(123)</script>
正则表达式:<.*>  # 贪婪匹配
上述正则匹配出来的内容是:<script>alert(123)</script>
正则表达式:<.*?>  # 非贪婪匹配
上述正则匹配出来的内容是:<script>      </script>

贪婪匹配

在这里插入图片描述

非贪婪匹配

在这里插入图片描述

所有的量词默认都是贪婪匹配 但是如果在量词的后面紧跟一个问号
那么就会变成非贪婪匹配
小技巧:以后我们在使用贪婪匹配或者非贪婪匹配的时候一般都是用.*或者.*?
并且结束的标志有上述符号左右两边添加的表达式决定

取消转义

  • 问题引入
    正则表达式里使用”\”作为转义字符,这就可能造成反斜杠困扰。
  • 处理方法
    假如你需要匹配文本中的字符”\”,那么使用编程语言表示的正则表达式里将需要4个反斜杠”\”:前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。Python里的原生字符串很好地解决了这个问题,Python中字符串前⾯加上 r 表示原⽣字符串。

正则表达式实战

编写校验用户手机号的正则
	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})

这些常用的肯定是已经有人已经写过了的,这个时候我们可以通过百度查询

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值