python_正则表达式

正则表达式

该知识点不属于任何一门编程语言 是一个独立的学科 主要用于数据的查找与筛选

1.前戏

需求:编写代码校验用户输入手机号是都合法
常见 13 15 17 18 19
纯python代码逻辑实现
#1.获取用户输入的手机号
phone_num = input('输入您的手机号>>>:').strip()
#2.判断输入的手机号是否是纯数字
if phone_num.isdigit():
    # 3.判断总长度是否是11位
    if len(phone_num) == 11:
        # 4.判断开始的数字是否满足常见号码
        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('输入不合法!')

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

2.正则表达式之字符组

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

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

[0 - 9]
匹配0 - 9之间的任意一个数字(包括0和9)
全称是:[0123456789]

[A - Z]
匹配A到Z之间的任意一个字母(包括A和Z)
全称是:[ABCDEFGHIJKLMNOPQRSTUVWXYZ]

[a - z]
匹配a - z之间的任意一个字母(包括a和z)
全称是:[abcdefghijklmnopqrstuvwxyz]
在括号中编写的多个数据值彼此都是或的关系

[0 - 9a - zA - Z]
数字、小写字母、大写字母

3.正则表达式之特殊符号

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

.
匹配除换行符以外的字符

\w
匹配字母或数字或下划线

\W
匹配非字母或者数字或下划线

\d
匹配数字

^
匹配字符串出现的开头

$

匹配字符串的结尾
ps: ^ 与$的组合能够明确的限制想要查找的具体数据 ^ 9$

a | b
匹配字符a或者b
ps: 管道符 | 在很多场景下的意思都是或

( )
给正则表达式分组
不影响正则表达式的匹配
ps: 用于后续的正则起别名 分组获取对应数据

[ ]
匹配字符组中的字符

[ ^ ]
匹配除了字符组中字符的所有字符

4.正则表达式之量词

在正则表达式中所有的量词默认都是贪婪匹配(尽可能多的)

量词不能单独使用 必须跟在表达式的后面 并且只能影响紧挨着的左边那一个

*

重复零次或更多次(默认就是尽可能多)

+

重复一次或更多次(默认就是尽可能多)

?
重复零次或者一次(默认就是一次)

{n}
重复n次

{n, }
重复n次或者更多次

{n, m}
重复n到m次

5.正则表达式练习题

方式题目结果
海.海燕海娇海东海燕 海娇 海东
^ 海.海燕海娇海东海燕
海.$海燕海娇海东海东
李.?李杰和李莲英和李二棍子李杰 李莲 李二
李.*李杰和李莲英和李二棍子李杰和李莲英和李二棍子
李.+李杰和李莲英和李二棍子李杰和李莲英和李二棍子
李.{1, 2}李杰和李莲英和李二棍子李杰和 李莲英 李二棍
李[杰莲英二棍子]*李杰和李莲英和李二棍子李杰 李莲英 李二棍子
李[ ^ 和]*李杰和李莲英和李二棍子李杰 李莲英 李二棍子
[\d]456bdha34 5 6 3
[\d]+456bdha3456 3

6.贪婪匹配与非贪婪匹配

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

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

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

7.取消转义

正则表达式中取消斜杠与字母的特殊含义 就是在斜杠前面加斜杠
	\\n			\n
	\\\\n		\\n
在python中有更加简便的写法
	r'\n'
 	r'\\n'

8.正则表达式实战

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

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值