python基础26-正则表达式
今日学习
正则表达式
作用:主要用于数据的查找和筛选。正则表达式本质上就是使用一些符号的组合产生一些特殊的含义
然后去字符串中筛选出符合条件的数据,不仅仅py里支持,shell,c等等
1.需求:编写代码校验用户输入的手机号是否合法
--------------------------------------------------------------------- ----
python正常代码逻辑实现,繁琐
------------------------------------------------------------------------
正则方法处理
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直接的任意一个数字
-----------------------------------------------------------------------------
[A-Z] 匹配A到Z之间的任意一个字母,(包括A和Z)
-----------------------------------------------------------------------------
[a-z] 匹配a-z之间的任意一个字母(包括a-z)
-----------------------------------------------------------------------------
[0-9a-zA-Z] 数字,小写字母,大写字母都可以.
----------------中括号内编写的多个值都是或的关系------------------------------
正则表达式之特殊符号
--------特殊符号在没有量词修饰的情况下,一个符号一次只会针对一个数据值--------
. 匹配除换行符以外的任意字符
------------------------------------------------------------------------
\w 匹配字母或数字下划线
-------------------------------------------------------------------------
\W 匹配非字母或者数字或下划线
-------------------------------------------------------------------------
^ 匹配字符串的开头
--------------------------------------------------------------------------
$ 匹配字符串的结尾
-------------------------------------------------------------------------
^$ 限制查找 eg: ^9$,查找9
-------------------------------------------------------------------------
a|b 匹配a或者字符b |管道符,很多场景下的意思都是或
--------------------------------------------------------------------------
() 小括号,给正则表达式分组,不影响正则表达式的匹配
--------------------------------------------------------------------------
[] 匹配字符组中的字符
--------------------------------------------------------------------------
[^] p匹配除了字符组中字符的所有数字
--------------------------------------------------------------------------
[^a]* 除a以外,全部都进行匹配
--------------------------------------------------------------------------
\d 匹配数字:[0-9]
--------------------------------------------------------------------------
\D 匹配非数字:[^0-9]
--------------------------------------------------------------------------
\s 匹配空格字符[\t\r\n\f]
--------------------------------------------------------------------------
\S 匹配非空格[^\t\r\n\f]
------------------------------------------------------------------------------
正则表达式量词
- 注意:正则表达式所有的两次都是贪婪匹配
量词:此不能单独使用,必须跟在表达式后面,并且只能紧挨着左边的哪一个
-----------------------------------------------------------------------
* 重复 0 或者更多次,默认的情况就是尽可能多
------------------------------------------------------------------------
+ 重复 1 次或者更多次,默认的情况下就是尽可能多
------------------------------------------------------------------------
? 重复 0 次或者 1 次,默认的情况下就是1次
------------------------------------------------------------------------
{n} 重复n次
------------------------------------------------------------------------
{n,} 重复n次或者更多次
------------------------------------------------------------------------
{n,m} 重复n到m次
------------------------------------------------------------------------
正则表达式练习题
题目 | 表达式 | 结果 |
---|---|---|
海燕海娇海东 | 海. | 海燕海娇海东 |
海燕海娇海东 | ^海. | 海燕 |
海燕海娇海东 | 海.$ | 海东 |
李杰和李莲英和李二棍子 | 李.? | 李杰李莲李二 |
李杰和李莲英和李二棍子 | 李.* | 李杰和李莲英和李二棍子 |
李杰和李莲英和李二棍子 | 李.+ | 李杰和李莲英和李二棍子 |
李杰和李莲英和李二棍子 | 李. | 李杰和李莲英李二棍 |
李杰和李莲英和李二棍子 | 李[杰莲英二棍子]* | 李杰李莲英李二棍子 |
李杰和李莲英和李二棍子 | 李[^和]* | 李杰李莲英李二棍子 |
贪婪匹配和非贪婪匹配
- 所有量词默认都是贪婪匹配,如果在量词后紧跟一个问号,那么变成非贪婪匹配
---------------------正则表达式:贪婪匹配 --------------------------------------------------
<.*>
--------------------正则表达式:非贪婪匹配--------------------------------------------------
<.*?>
---------------------------练习例子------------------------------------------------------
<script>alert(123)</script>
<.*> 结果 <script>alert(123)</script>
<.*?> 结果 <script> </script>
-----------------------------
小技巧:以后我们在使用贪婪匹配或者非贪婪匹配的时候一般都是用.*或者.*?
并且结束的标志有上述符号左右两边添加的表达式决定
取消转义
正则表达式中取消斜杠与字母的特殊含义 就是在斜杠前面加斜杠
\\n \n
\\\\n \\n
--------------------------------------------------------------------------------
在python中有更加简便的写法
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})
"""
常见的正则百度查找即可 我们需要做到的时候能够看到别人写的
能够完成基础的修改即可
"""