栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

Day26——正则法则

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Day26——正则法则

今日内容
正则法则 正则表达式
  • 简介

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

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

    纯代码实现

     # 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⾥数量词默认是贪婪的,总是尝试匹配尽可能多的字符;⾮贪婪则相反,总是尝试匹配尽可能少的字符。

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

贪婪匹配

非贪婪匹配

所有的量词默认都是贪婪匹配 但是如果在量词的后面紧跟一个问号
那么就会变成非贪婪匹配
小技巧:以后我们在使用贪婪匹配或者非贪婪匹配的时候一般都是用.*或者.*?
并且结束的标志有上述符号左右两边添加的表达式决定
取消转义
  • 问题引入
    正则表达式里使用””作为转义字符,这就可能造成反斜杠困扰。
  • 处理方法
    假如你需要匹配文本中的字符””,那么使用编程语言表示的正则表达式里将需要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})

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1018297.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号